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

aac*_*kin 4 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)
);
Run Code Online (Sandbox Code Playgroud)

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

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

因此,我用n在获得该陈述热点的情况下,均匀分布行这里 ;

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

'2013-07-30'|1, some-timeuuid 
'2013-07-30'|1, another-timeuuid
Run Code Online (Sandbox Code Playgroud)

我看到他们不在同一个物理节点上.

我得到节点信息;

nodetool getendpoint keyspace columnfamily some-timeuuid

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

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

Joh*_*ohn 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)

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

  • 复合分隔符是:,并且您不应该在字符串周围放置引号,因为它们将包含在键中.所以第一个例子应该是`nodetool getendpoints keyspace columnfamily 2013-07-30:1`. (3认同)