当前位置: 首页 > 知识库问答 >
问题:

如何控制Cassandra中的高读取延迟?

嵇丰
2023-03-14

我已经建立了一个具有3个节点的Cassandra。在客户端,我使用的是Datasatx java驱动程序,我的查询如下

Select Abc from Cassandra where key =a and cluster_column<=10 limit 1;

正如我们在上面的查询中看到的,我希望最大的“cluster_column”小于10。我有宽行。所以当数据在行间增长时,读取延迟会增加。

我只使用密钥缓存和级别压缩策略。MemTable大小保持为2048 MB。

我可以调整什么参数来降低服务器级别的读取延迟。

请回复

提前感谢

共有1个答案

徐昆
2023-03-14

在Cassandra中,匹配分区键时,将获取整行,然后应用后续筛选器。根据您的(复合)主键,Cassandra中的一行可以是CQL表中的多行。

在您的情况下,如果经常对一小部分列执行select查询,可以使用以下解决方案之一:

>

  • 更改分区键以拥有多个列。这会让你的划船变得很瘦。

    确保将查询中经常使用的列添加到复合主键中。并仔细选择主键列,因为分区键只支持equals和in条件。

    创建另一个表,其中包含经常查询的列的子集。这将减少每个Cassandra行的大小,从而提高延迟。

    我建议你阅读这篇博文来更好地理解Cassandra中的宽行,并阅读这篇博文来理解Where子句的限制

  •  类似资料:
    • 我在一个由三台机器组成的集群上使用cassandra 2.1.12,每台机器都有32 GB的RAM和4个内核(在Amazon AWS上) 我使用的是cassandra的所有默认配置。 我用它来进行我的网站事件分析(时间序列数据),每天的数据约为1 GB,复制因子为3。 我的数据在每台机器上已经增长到85 GB左右,现在它的读取延迟约为 我的行很少更新,所以,我没有使用Levelorder Comp

    • 大家好,已经有人问过类似的问题,但我想我们有点不同的问题: 我们使用Cassandra 2.2.6一个节点安装(并将升级到最新的)。现在我们有可怕的查询时间,有时会写超时。 为了进行比较,有一个不同的表包含大约10万条记录,其构造与上述非常相似 区别在于第一个包含大量地图和UDT。在dev center中进行简单测试选择*from。。。限制999;(省略任何Lucene索引等)最后一个显示183m

    • 我把来自https://bitnami.com/stack/cassandra的卡珊德拉安装在云机器上。我克隆了这台机器,所以我有2台机器。一个运行cassandra服务器(1节点cassandra集群),另一个充当客户端并向第一个服务器发出查询。 我使用YCSB-https://github.com/brianfrankcooper/YCSB来执行基准测试。我观察到服务器上的读取延迟非常低,只有

    • 我正在开发Azure Managed Cassandra,目前正在观察从一个分区读取数据时的读取性能问题。卡珊德拉密钥空间 在一个RF为3的数据中心中使用SimpleStrategy创建了密钥空间。下面是表格说明: 对于单分区查询,响应时间大约为300到400毫秒。 我启用了跟踪来检查系统跟踪,下面是观察结果 对于上述项目 ID(1001),我们有 2000 条记录。 当我们将RF指定为3时,为什

    • 我们有一个20节点的Cassandra集群,运行大量读取请求(峰值约900k/sec)。我们的数据集相当小,所以所有内容都是直接从内存(OS页面缓存)提供的。我们的数据模型非常简单(只是一个键/值),所有读取都是在一致性级别1(RF 3)下执行的。 我们将JavaDatastax驱动程序与TokenAware策略一起使用,因此所有的读取都应该直接到达一个拥有请求数据的节点。 这些是从其中一个节点提

    • 我正在用一个简单的模型测试卡桑德拉的性能。 我使用pycassa,get/xget函数()获取行键的100列。但在服务器上读取延迟约为15毫秒。 nodetool cfstats 这种类型的延迟是惊人的!当nodetool信息显示读取直接命中行缓存时。 谁能告诉我为什么cassandra在读取行缓存时要花这么多时间?