【问题标题】:Cassandra - Composite Partition Keys and PerformanceCassandra - 复合分区键和性能
【发布时间】:2019-03-19 02:31:56
【问题描述】:

我正在研究 Cassandra 环境的键空间和表。我了解 Cassandra 的大小限制并处理分区键以使其保持优化。但是,我与开发人员在如何处理密钥方面存在分歧。拥有包含大量数据而不是少量数据的密钥是否有任何缺点。例如,

我有 10 万条记录。我可以创建一个将其划分为 10k 的密钥;我还可以创建一个密钥,将其划分为 10 条记录(按天计算)。所以我要么存储 10k 和 10 个分区,要么存储 10 条记录和 10,000 个分区。

【问题讨论】:

  • 10k in 10 个分区对我来说听起来不错,只要记录不是很大。经验法则是理想的分区大小是 100mb,然后您可以在一次读取(或按 fetch 大小分解)中有效地读取全天记录。也许分享您正在考虑的两个模式以及您希望如何查询它们,人们可以提供更多见解

标签: cassandra


【解决方案1】:

请记住,键中有更多列需要您在选择语句中指定这些列,这有时是不希望的。分区越多越好——无论是选择更好的单列还是多列。

Cassandra 通过分区键读取数据,如果使用集群列,则可以获得性能帮助。如果您有一个大分区,则必须读取整个分区(内存和磁盘),然后合并输出。如果您有大分区,这肯定会减慢您的速度。

【讨论】:

  • Cassandra 不会读取整个分区。每个分区在其二进制搜索的每个column_index_size_in_kb 上都有一个集群键索引。分区在 GB 范围内工作得很好(在 3.8+ 版本中),但是反序列化该索引的成本会对堆分配压力产生负面影响,并可能导致长 GC。
  • 我上面的假设是在查询中没有提供/应用聚类列/过滤器(我关于“如果使用聚类列可以获得帮助”的声明)。因此将读取整个分区。
  • 它仍然不会一次读取整个分区,除非它很小或者你明确地覆盖了驱动程序中的多个选项(它在多次获取中分页浏览分区),即使这样 C* 最终也会丢弃如果它们变得太大,则节点间消息。
猜你喜欢
  • 2014-06-10
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 2016-05-12
  • 2019-08-31
  • 1970-01-01
相关资源
最近更新 更多