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

问题描述

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

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 (将#修改为@)