【问题标题】:Continuously update database without overloading the server持续更新数据库而不会使服务器过载
【发布时间】:2017-02-17 12:03:20
【问题描述】:

我必须维护数据库中某些记录的排名,这些记录会根据上次交互的时间而改变。

Post
______________
Id    
Content
LastAccessTime
LastRankedTime
Rank

我正在考虑定期访问数据库并获取 LastRankedTime > 15 分钟的所有帖子

然后在将它们全部写回数据库之前对每个项目应用 Rank()

如果我必须对超过 10.000 条记录进行排名,我是否需要担心长时间的排名计算或大型读/写会使我的服务器/数据库超载?

解决这个问题的更好方法是什么? 每次 Db 访问记录数有限的受限制线程将如何提供帮助?

【问题讨论】:

  • 根据您使用的数据库,可能已经有这种机制。例如,在 SQL Server 中,ROWVERSION 可以告诉您自上次查看某行以来是否已更新。
  • 但是我仍然需要把记录拉出来重新做排名,因为它也依赖于其他指标。所以在这种情况下,这可能不会有太大帮助。

标签: database multithreading


【解决方案1】:

在您正在使用的列上创建索引会正常工作

【讨论】:

  • 您能否提供更详细的答案,索引在这种特殊情况下有何帮助?
【解决方案2】:

根据你使用的数据库,可以有多个数据库节点,你可以考虑集群数据库。

您只需将数据写入一个节点。这将在表中没有索引。这使得插入更快。你不从这个节点读取。

与此同时,另一个节点仅用于读取目的,并进行了大量索引以加快搜索速度。

第一个节点会定期将数据同步/复制到其他节点。您可以配置此类同步的时间间隔。这是标准方法,通常在流量较大的大型架构中采用。

【讨论】:

  • 谢谢。我最终使用具有简单有限 i/o 的后台工作人员。如果数据库意外变大,我会研究这个解决方案
猜你喜欢
  • 2015-02-28
  • 1970-01-01
  • 2017-07-22
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
相关资源
最近更新 更多