繁体   English   中英

从数据库读取最新行的最佳实践

[英]Best practice reading newest rows from database

我有一个表格,经常存储用户的位置。 我想经常查询该表并返回我尚未读取的最新行。

这样做的最佳实践方法是什么。 我的想法是:

  1. 添加一个boolean读取标志,查询所有结果为false的结果,返回它们,然后全部更新。 这可能会使多余的写入速度变慢
  2. 将最后读取的行的ID保存在客户端,并查询大于此行的行。 这里唯一的问题是我的客户可能会失去他们的位置
  3. 一些数据流

最终将有多个位置的usersreaders ,因此不会有所扩展

如果您拥有的是一个存储行的SQL数据库。 我建议类似选项2的内容。

我可能要做的是保留一个时间戳而不是ID,并保留一个索引(MSSQL或类似结构上的聚集索引,以便根据时间对新行进行物理排序)。 然后只需查询比此更新的内容即可。

那确实有“失去他们的位置”的问题。 如果客户端必须阅读发布的每一行,那么我要么在处理后将其删除,要么在数据库中有一个标志来指示它们已被处理。 如果客户端只需要重新开始读取当前数据,那么我将按照上面的方法进行操作,但是使用最新的现有行来初始化时间。

如果您必须处理每条记录,而不仅限于数据库,那么您真正要说的是消息队列。 如果您需要处理能够访问各个数据点,则消息处理的一个步骤可能是将其插入数据库中以供以后查询(除了对读取的数据进行任何处理之外)。

按评论编辑:

如果在接收时不需要进行任何处理,但是您只想定期更新数据,则可以采用保留上次接收时间或ID而不删除数据的解决方案。 在那种情况下,我建议不要在重新启动/重新连接之间保留最后一个已知的ID /时间戳,因为您可能最终会无意间加载了一大堆数据。 重新启动时,只需将其重置为最大即可。

另外,当我做这样的事情时,我使用MQTT传输数据并进行“实时”更新获得了成功。 那是一个发布/订阅消息协议。 您可以在后端订阅一个流程,然后将数据转发到数据库,而经常需要数据的事物可以直接订阅数据流以进行实时更新。 还有一个功能可以保留最新发布的消息,并将其转发给新订阅者,这样您就不会一开始就完全空白。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM