Cassandra实时数据查询错误

时间:2018-06-08 03:49:50

标签: cassandra

我遇到了Cassandra的问题如下: - Sys有4个节点(DL80,64G RAM,4SSD) - 一个表包含大约20万条记录。此表是实时更新:每秒更新200条记录。 - Web应用程序有时会查询缓存的全表并满足异常超时或逻辑删除警告。 任何人都可以指导我解决这个问题吗? 非常感谢。

1 个答案:

答案 0 :(得分:2)

所以我读到了这个:

  

一个表包含大约200,000条记录。此表是实时更新:每秒更新200条记录。

...然后这个:

  

此表有一个分区键值,用于保存一个节点中的所有记录。

我看到的主要问题是,您在一个分区中存储了太多行。 Cassandra每个分区最多有20亿个单元。我不知道你有多少列,但即使你没有达到这个限制,我希望对该分区的查询最终会变得越来越慢。特别是因为您要就地更新行。

这也是另一个红旗:

  

Web应用有时会查询全表

查询表中的所有行是Cassandra不擅长的东西。支持此查询可能是您将所有内容放在单个分区中的原因,但正如您所发现的那样,该方法存在问题。

我不知道你的桌子是什么样的,但这是你需要做出一些调整的地方。

  • 如果你确实需要查询表中的所有行,那么还有其他几个数据库可以比Cassandra做得更好。
  • 尽量不要就地更新数据。由于Cassandra有一个基于日志的,仅附加存储引擎,因此您实际上并没有更新"任何东西。更新和插入是同义的,只需为密钥写一个新值。旧数据已废弃,并且在压缩运行之前仍然存在。
  • 单分区键方法根本无法扩展。如果您正在这样做,您也可以使用RDBMS。如果您的数据是基于时间的,那么使用"时间桶"来构建分区键。会更好地分发。
  • Cassandra的大多数问题都来自错误的数据模型(表定义)。它不像Oracle,有人可以调整数据库"通过更改一些配置设置,使一切运行得更好。没有任何配置可以帮助建立糟糕的数据模型。