将数据标记为“脏”以在分布式系统中定期更新的最佳方法?

问题描述

例如可以说我有一个聊天应用程序,有一个线程表和一个消息表。线程具有消息数。例如:

Thread
id: int
numMessages: int

Messages
threadId: int
content: text

每当我插入一条消息时,我就可以递增numMessages,或者我可以计算每次的消息数,以防numMessages不同步。但是,假设有大量消息,我不想每次有新消息时都更新thread表。最终保持一致是可以的。例如。我可以每分钟更新一次numMessages。原因之一是我可能在MySQL / Postgres中有threads表,而在Cassandra / Hbase中有messages表,这对于较高的IO更好。

然后,由于我不想每分钟都更新每个线程,所以我需要知道哪些线程需要更新。假设我有多个服务器连接到数据库集群,我想到了一些方法:

  1. 使用消息队列并在每次创建消息时发送一条消息。我需要延迟+重复数据删除,这在默认情况下我认为RabbitMQ / Redis无法做到。

  2. 在Redis中存储一组需要更新的线程ID。

编辑:3.在message表中查询需要更新的线程。

还有更好的方法吗?我知道这是过早的优化,但是我想学习如何正确进行优化。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...