【问题标题】:Coherent read-only view of a database数据库的一致只读视图
【发布时间】:2012-04-13 16:07:22
【问题描述】:

我想执行一个返回大量数据库数据的选择查询。所述数据库迫使我将我的查询拆分为 10000 个结果块,并带有偏移量 + 限制。当我遍历这些块时,其他人会更新数据库,这在某些情况下可能会使数据库多次返回同一行。我通过一个删除具有重复 ID 的行的后处理过滤器来处理它,但我想知道是否有一种方法可以构建一组 sql 查询,使我能够跨多个 select 语句获得数据库的一致视图。即,BEGIN+COMMIT 但用于选择。

我有没有提到我不是 sql 人?

【问题讨论】:

  • 请说明您使用的数据库以及接收部分的代码(无论是哪种语言)。我怀疑大多数数据库在以流模式调用时能够提供更多结果,但如果没有这些信息,就不能肯定地说。
  • 事实上,我不得不承认这个问题是在与 sparql virtuoso 服务器通话时发生的。我曾经使用过的所有 sql 数据库都可以很好地处理这种情况,只需将数据流式传输给我,直到我得到所有数据。
  • 嗯,这个是商业项目,有没有试过打热线?我的意思是,它应该以某种方式(无论是交易形式还是流媒体形式)为您提供解决方案,并且开发人员会最了解。

标签: sql database


【解决方案1】:

你不能:

按 ID 排序,获取前 10000 个,获取 LAST id。

第二次过滤大于 LAST id,得到下一个 10000。

做同样的事情直到你完成

Select top(10000) * from Table order by id

获取最后一个id

Select top(10000) * from Table where id> LAST order by id

LAST 当然是用数字代替

非常低级,但应该解决问题并消除重复

【讨论】:

  • 如果在我查看数据库时删除了一行并且重复使用了它的行 ID,会发生什么?
  • 在下次运行之前你不会得到“新”版本。行 ID 应该是唯一的,但在您的情况下可能不是......是否有可以用于排序的时间戳?因此最后得到新的。不过,您将不得不再次处理相同的 ID 问题...
  • @mathieu 如果 ID 是唯一的,该功能应该可以工作。如果不是(可以重复使用),那么您应该生成一个唯一的 ID 并使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
相关资源
最近更新 更多