【问题标题】:cassandra composite, compund keys on multi nodecassandra复合,多节点上的复合键
【发布时间】:2013-07-30 13:28:56
【问题描述】:

我最近在 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 亿列的情况下不要太宽。 (这是列的大小限制)

那么,有什么想法吗?

【问题讨论】:

    标签: cassandra nodetool


    【解决方案1】:

    如果没记错的话,为了找出您的行存储在哪些节点中,您需要运行:

    nodetool getendpoints keyspace columnfamily 2013-07-30:1

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

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

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

    (在 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
    • 显然,nodetool getendpoints 也为不存在的键提供输出。它在对密钥运行算法后输出物理节点 ip。你对getendpoints的用法是正确的
    猜你喜欢
    • 1970-01-01
    • 2013-07-12
    • 2016-04-08
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2014-09-23
    • 2012-04-10
    相关资源
    最近更新 更多