gpt4 book ai didi

performance - 为什么 Cassandra 二级索引仅在 350k 行上就这么慢?

转载 作者:行者123 更新时间:2023-12-04 03:24:47 26 4
gpt4 key购买 nike

我有一个带有二级索引的列族。二级索引基本上是一个二进制字段,但我使用的是一个字符串。该字段名为 is_exported 并且可以是 '真' '假' .请求后,所有加载的行都更新为 is_exported = '假' .

我每十分钟轮询一次这个列表,并在新行出现时导出它们。

但这里的问题是:我看到这个查询的时间与列表中的数据量呈线性增长,目前它需要 从 12 到 20 秒 (!!!) 找到 5000 行 .根据我的理解,索引请求不应该取决于 CF 中的行数,而是取决于每个索引值(基数)的行数,因为它只是另一个隐藏的 CF,例如:

    "true" : rowKey1 rowKey2 rowKey3 ...
"false": rowKey1 rowKey2 rowKey3 ...

我正在使用 Pycassa 查询数据,这里是我使用的代码:
    column_family = pycassa.ColumnFamily(cassandra_pool, column_family_name, read_consistency_level=2)
is_exported_expr = create_index_expression('is_exported', 'false')
clause = create_index_clause([is_exported_expr], count = 5000)
column_family.get_indexed_slices(clause)

我做错了什么,但我希望这个操作能更快地工作。

有什么想法或建议吗?

一些配置信息:
  • Cassandra 1.1.0
  • 随机分区器
  • 我有 2 个节点,replication_factor = 2(每个服务器都有一个完整的数据副本)
  • 使用 AWS EC2,大型实例
  • 临时驱动器上的软件 raid0

  • 提前致谢!

    最佳答案

    我不知道 Cassandra 中索引的内部原理,但我假设它的行为方式与 PostgreSQL/MySQL 类似,索引 bool 值,真/假列在许多情况下都是多余的。如果基数较低(true & false = 2 个唯一值)并且数据分布非常均匀,例如~50% true 和 ~50% false,那么数据库引擎可能会执行全表扫描(不使用索引)。

    查询执行和数据集大小之间的线性关系将进一步支持 Cassandra 正在执行全表(键空间)扫描。

    关于performance - 为什么 Cassandra 二级索引仅在 350k 行上就这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12165311/

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