2012-10-28 130 views
0

ALL, 我有一些數據庫。 我也有一個與數據庫通信的C++應用程序。哪種情況更有效?

哪種情況更有效?

方案1:

  1. 用戶按下 「編輯數據」 按鈕。
  2. 程序從數據庫中讀取數據,並進行編輯
  3. 用戶編輯的數據,然後點擊「保存」按鈕
  4. 計劃與新保存的數據創建新的對象,然後使用舊的對象進行比較。
  5. 程序發出一些UPDATE語句。

方案2:

  1. 步驟1-3是相同的。
  2. 程序用新數據覆蓋舊的對象數據。
  3. 程序在一個事務中發出DELETE/INSERT語句。

我傾向於說方案2

+3

我傾向於說選項1.但沒有一般的答案,在你的問題中有太多的變量。獲得答案的唯一方法是嘗試兩種方法和**時間**。 – john

+0

@john,你從數據庫角度講話吧?那麼C++的觀點呢?有一些字符串,整數和向量。 – Igor

+1

這取決於你的意思是「更高效」嗎?更快?使用更少的內存?使用更少的其他資源?真正瞭解哪個更「高效」的唯一方法就是衡量!嘗試兩種方法,並衡量你認爲重要的事情,然後你會知道確切的。 –

回答

1

它的一個問題,其中是有效的,事務性的聲音。刪除現有對象以執行更新在事務上並不合理。存在更新以更新數據庫中的現有實體。如果你使用的是合成密鑰,你完全不能使用這種方法。

在大多數系統中,必須執行重新讀取操作(至少要檢查您要提交的對象是否因爲您從數據庫中請求而被修改過)。

第4步應該讀取,從數據庫中重新提取對象以確保它沒有改變,然後提交更新或回滾。

+0

stackmonster,用戶將不能改變,但刪除一些數據或添加新的。這是複雜的交易,我想通過刪除/插入來保證安全。這不是一個「全新」的記錄創建,也不是記錄刪除。在這裏可以完成所有3個操作。數據主要存儲在向量中。 – Igor

+0

因此,第二個用戶對相同數據有參考,您將其刪除,然後其他用戶回來更新它。但它不在那裏。僅僅因爲它看起來很複雜並不意味着你可以正確地執行交易。 –