gpt4 book ai didi

长行的 Cassandra 性能

转载 作者:行者123 更新时间:2023-12-04 06:07:14 32 4
gpt4 key购买 nike

我正在考虑在 Cassandra 中实现一个具有很长行(每行数十万到数百万列)的 CF。

使用完全虚拟的数据,我已将 200 万列插入到一行中(均匀间隔)。如果我执行切片操作以获得 20 列,那么当您在行的更下方执行切片操作时,我会注意到性能大幅下降。

对于大多数列,我似乎能够在 10-40 毫秒内提供切片结果,但是当您接近行尾时,性能遇到瓶颈,响应时间从 1,800,000 标记处的 43 毫秒逐渐增加到 214 毫秒在 1,900,000 和 435ms 在 1,999,900! (所有切片的宽度相等)。

我无法解释为什么当您到达行尾时性能会出现这种大幅下降。有人可以就 Cassandra 在内部做什么来造成这样的延迟提供一些指导吗?行缓存已关闭,几乎所有内容都是默认的 Cassandra 1.0 安装。

它应该能够支持每行多达 20 亿列,但以这种速度提高性能意味着它不能在实际情况下用于非常长的行。

非常感谢。

警告,我一次并行处理 10 个请求,这就是为什么它们比我预期的要慢一点,但这是对所有请求的公平测试,甚至只是串行执行它们,这很奇怪第 1,800,000 次和第 1,900,000 次记录之间的退化。

我还注意到,当每行只有 200,000 列时,仅对单个项目执行反向切片时的性能非常差:
query.setRange(end, start, false, 1);

最佳答案

一个很好的资源是 Aaron Morton 在 Cassandra 上的博客文章 Reversed Comparators .从文章:

Recall from my post on Cassandra Query Plans that once rows get to a certain size they include an index of the columns. And that the entire index must be read whenever any part of the index needs to be used, which is the case when using a Slice Range that specifies start or reversed. So the fastest slice query to run against a row was one that retrieved the first X columns in a row by only specifying a column count.



如果您主要从一行的末尾读取(例如,如果您按时间戳存储内容并且您主要想查看最近的数据),则可以使用 Reversed Comparator它以降序存储您的列。这将为您提供更好(和更一致)的查询性能。

如果您的读取模式更随机,则最好将数据分区为多行。

关于长行的 Cassandra 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9741522/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com