2012-10-28 132 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

因此,第二个用户对相同数据有参考,您将其删除,然后其他用户回来更新它。但它不在那里。仅仅因为它看起来很复杂并不意味着你可以正确地执行交易。 –