【发布时间】:2024-01-19 12:48:01
【问题描述】:
我正在设计一个使用 NoSQL 数据库(如 MongoDb/Cassandra)的聊天应用程序。 对时间最敏感的查询是查找属于聊天的消息。
我知道会有一个Message 集合,但不确定如何根据 chatId 对这个集合进行分区。我想即使clustered index 也不适合这种类型的用例。
假设Message 将遵循以下结构:
{
"chatId" : 123,
"messageId" : 456,
"text" : "Hello World!"
}
我认为唯一的方法是在messageId 上进行分区并在所有分区中搜索聊天消息。
【问题讨论】:
-
"在所有分区中搜索聊天消息。"由于一个分区中的所有数据都保证在同一个节点上,因此查询多个分区会命中多个节点。在 NoSQL 中,查询时间就是网络时间,而在大型集群中,“搜索...在所有分区中”是一个糟糕的设计。事实上,我希望你是查询而不是搜索。
标签: mongodb cassandra nosql partitioning