2012-02-23 51 views
0

我有一个数据库表,其中一列有Y/N标志。我想读取标志为'N'的所有记录,并在处理记录后,在该记录中将标志设置为'Y'。使用两个单独的连接在同一时间执行此操作是否正确并合理?或者我应该先阅读整个表格,并在阅读结束后才更新?什么是正确的方法呢?在阅读时更新表格

涉及的数据库是Netezza,万一它很重要。

+0

它总是很重要。由于我不知道netezza,我无法回答。但是,如果它已关闭SQLite和WAL模式,则答案将是:无并发读取和写入。 – Benoit 2012-02-23 18:27:05

+0

谢谢,分离阅读和写作看起来更清晰。我只是想知道交易隔离是否会对我有所帮助,以及是否有标准模式来做这种事情。 – drmirror 2012-02-23 18:32:16

+2

你有没有[阅读此](http://www.dsxchange.com/viewtopic.php?t=125306&view=previous)? – Benoit 2012-02-23 18:36:15

回答

1

您应该先阅读然后更新。不是异步的。如果“选择”部分需要很长时间,则应考虑批量操作。您可以使用单独的连接,但应确信已完成阅读。

+0

谢谢,那看起来像是谨慎的路线。我希望了解更多关于事务隔离和数据库可能用于这类事情的其他工具。但我同意先阅读所有内容然后更新是最干净的方法。 – drmirror 2012-02-24 19:51:44

1

主要取决于您的设计和需求。

国旗有多重要?如果在处理完所有标志之前设置了所有标志,则会发生什么情况......等等。

为什么你需要两个连接是我的理解,通常你有一个连接,你保持开放。我不知道Netezza的块,但也可以做一些系统来同时进行选择和更新。

你可以这样做:

  1. 加载了一堆,对它们进行处理,然后更新所有标志。 (最快,一次失败=全部失败)
  2. 加载一堆,处理一个,更新一个标志,下一个进程..(相当快,一次失败,不会全部击中)
  3. 一个接一个地取出并更新它们。 (将是最慢但最安全的)