Cassandra 有多少 columns/row 以获得最佳性能?
Cassandra how many columns/row for optimal performance?
我正在编写一个聊天服务器,并且想将我的消息存储在 cassandra 中。因为我需要范围查询,而且我知道我会期望 100 messages/day 并保留 6 个月的历史记录,所以我会在某一点为用户提供 18000 条消息。
现在,因为我要进行范围查询,所以我需要将我的数据放在同一台机器上。要么我必须使用我不完全理解的 ByteOrderPartitioner,要么我可以将用户的所有消息存储在同一行上。
create table users_conversations(jid1 bigint, jid2 bigint, archiveid timeuuid, stanza text, primary key((jid1, jid2), archiveid)) with CLUSTERING ORDER BY (archiveid DESC );
所以我将有 18000 列。你认为我使用这种集群键方法会有性能问题吗?
如果是,我有什么选择?
谢谢
。我怎么强调这一点的重要性都不为过。
since I'll do range queries I need my data to be on the same machine.
你的 PRIMARY KEY 定义如下:
primary key((jid1, jid2), archiveid)
您当前的分区键(jid1
和 jid2
)将被组合和散列,以便 jid1
和 jid2
的特定值的所有消息一起存储在同一个分区。缺点是每个查询都需要 jid1
和 jid2
。但是它们将在 archiveid
上排序,您将能够在 archiveid
上按范围查询,只要您不达到每个分区 20 亿列的限制,它应该表现良好。
我正在编写一个聊天服务器,并且想将我的消息存储在 cassandra 中。因为我需要范围查询,而且我知道我会期望 100 messages/day 并保留 6 个月的历史记录,所以我会在某一点为用户提供 18000 条消息。
现在,因为我要进行范围查询,所以我需要将我的数据放在同一台机器上。要么我必须使用我不完全理解的 ByteOrderPartitioner,要么我可以将用户的所有消息存储在同一行上。
create table users_conversations(jid1 bigint, jid2 bigint, archiveid timeuuid, stanza text, primary key((jid1, jid2), archiveid)) with CLUSTERING ORDER BY (archiveid DESC );
所以我将有 18000 列。你认为我使用这种集群键方法会有性能问题吗?
如果是,我有什么选择?
谢谢
since I'll do range queries I need my data to be on the same machine.
你的 PRIMARY KEY 定义如下:
primary key((jid1, jid2), archiveid)
您当前的分区键(jid1
和 jid2
)将被组合和散列,以便 jid1
和 jid2
的特定值的所有消息一起存储在同一个分区。缺点是每个查询都需要 jid1
和 jid2
。但是它们将在 archiveid
上排序,您将能够在 archiveid
上按范围查询,只要您不达到每个分区 20 亿列的限制,它应该表现良好。