【问题标题】:Performance with rows_per_partition and datamodel in CassandraCassandra 中 rows_per_partition 和数据模型的性能
【发布时间】:2016-07-12 14:00:42
【问题描述】:

我们有一个应用程序,它有 10 个主[静态] 数据表(每个表大约有 100 行)。对这些表的更新可以忽略不计。所有这些表格数据将在应用程序上显示为选择列表

  1. rows_per_partition 从默认的“NONE”更改为如下所示的 100 时,是否会有任何性能提升?由于这些主表不会一直更新和访问

例如:

ALTER TABLE devloc.regions
with caching = {
    'keys' : 'ALL',
    'rows_per_partition' : '100'
};
  1. 一张表有100列数据,经常查询显示信息。这就像一个查找表。

    数据模型1

    创建表 devloc.display_all ( id uuid 主键, 日期值时间戳, col2 文本, col3 文本, col4 文本, col5 文本, col6 文本, col7 文本, .... 多达 100 列 )

    查询:Select *from devloc.display_all where id =89d23c25-4921-4d57-8f2c-87a9f4ca204d;

这是时间序列表,数据多年来每天都在增长。添加日期值作为分桶键会提高查询的性能吗?

数据模型2

创建表 devloc.display_all ( id uuid, 日期值时间戳, col2 文本, col3 文本, col4 文本, col5 文本, col6 文本, col7 文本, .... 多达 100 列 ) 主键(id, datevalue);

完成了两个模型的压力测试,并在不使用 datevalue 作为存储桶时看到了良好的性能。

第一个峰值是 datamodel1,第二个峰值是 datamodel2 对我们来说,即使是毫秒,延迟也很重要。谁能帮我理解一下?

DSE 4.8.5
read Write Consistency level LOCAL_QUORUM
replication 3
Datacenters 2

【问题讨论】:

    标签: cassandra data-modeling datastax-enterprise


    【解决方案1】:
    1. rows_per_partition 启用行缓存并定义将在缓存中保留多少分区的第一行。如果您只有 100 行,那么是的,它应该缓存它们。此参数也可以具有值ALL。但是另外row_cache_size_in_mb 必须设置为可以将所有行保存在内存中的值。

    2. 性能不是真的(如果您仅通过 id 查询)。它可以为您提供确定的顺序,但似乎每个 id (每个 pertition)只有一行,所以您不需要它。请记住,在集群键值下面成为给定行中每个列名的前缀,因此理论上它会产生一些开销(查看复合键表部分 http://www.planetcassandra.org/blog/composite-keys-in-apache-cassandra/)。

    【讨论】:

      【解决方案2】:
      1. rows_per_partition 是每个分区的多少行将缓存在“行缓存”中(当您运行读取查询时,cassandra 会首先查找的位置是哪里)。当您再次读取该行时,cassandra 无需再次在表中查找该行,因此您的读取查询会更快。

      2. 分区键仅用于 cassandra 用于定位在环中存储该分区的位置,然后它将按聚类列对该分区中的数据进行排序(作为您的第二个模型)。如果您只有一行/分区,则根本不需要将聚类列添加到主键。

      【讨论】:

        猜你喜欢
        • 2014-06-14
        • 2011-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-13
        相关资源
        最近更新 更多