4

我最近在 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所述的热点;

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

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

我看到它们不在同一个物理节点中。

我通过以下方式获取节点信息;

nodetool getendpoint keyspace columnfamily some-timeuuid

因此,不知何故,我希望它们位于同一行以提高读取性能,但在获得 20 亿列的情况下不要太宽。(这是列的大小限制)

那么,有什么想法吗?

4

1 回答 1

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 )

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

于 2013-07-30T12:26:53.213 回答