cassandra复合,多节点上的复合键

时间:2013-07-30 11:56:00

标签: cassandra nodetool

我最近在cassandra做了一些不同设计的性能测试。 我目前正在使用cassandra作为写密集型项目。但是,我将使用select语句添加读取密集型部分来导出数据。

我正在使用下表做时间序列;

CREATE TABLE events (
  date text,
  n int, // it could be 1,2,3
  id timeuuid,
  PRIMARY KEY ((date, n), id)
);

我有date|n作为分区键。为了提高读取性能,我试图从宽行的概念中获益。在文档中,声明;

如果分区键相同,则将它们插入到同一物理节点,并加宽分区键的行。

因此,我使用n来均匀分布行,以便获得热点,here;

但是,在多节点群集中,当我插入以下内容时;

'2013-07-30'|1, some-timeuuid 
'2013-07-30'|1, another-timeuuid

我发现它们不在同一个物理节点中。

我通过;

获取节点信息

nodetool getendpoint keyspace columnfamily some-timeuuid

所以,不知何故,我希望它们在同一行中以提高读取性能,但在获得20亿列时不会太宽。 (这是列的大小限制)

那么,任何想法在这里发生了什么?

1 个答案:

答案 0 :(得分:7)

如果没有弄错,为了找出存储行的节点,您需要运行:

nodetool getendpoints keyspace columnfamily 2013-07-30:1

使用(复合分区/)行键而不是列键。

如果您使用SimpleStrategy进行令牌/副本计算,这将在内部发生:

  

您计算密钥的MD5哈希值。创建令牌的排序列表   分配给环中的节点。找到大于的第一个标记   哈希。这是第一个节点。列表中的下一个是副本,   这取决于RF。

(在cassandra邮件列表中找到了这个  http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/How-to-find-what-node-a-key-is-on-td6202253.html

(根据评论更新了我的答案。)