【问题标题】:Cassandra Performance : Less rows with more columns vs more rows with less columnsCassandra 性能:更少的行和更多的列与更多的行和更少的列
【发布时间】:2015-09-05 02:54:22
【问题描述】:

我们正在评估是否可以从 SQL SERVER 迁移到 cassandra for OLAP。根据内部存储结构,我们可以有宽行。我们几乎需要按日期访问数据。我们经常需要访问日期范围内的数据,因为我们有财务数据。如果我们使用日期作为分区键来支持按日期过滤,我们最终会得到更少的行和大量的列。 如果我们将来每天处理数百万个事务时有数百万列用于单个行键,它会影响性能吗?

我们是否需要对访问模式进行一些更改,以使每行的列数更少。

需要一些性能洞察力才能朝任一方向前进

【问题讨论】:

    标签: cassandra cql3 datastax-java-driver


    【解决方案1】:

    在 Cassandra 中使用宽行通常没问题,但是需要考虑以下几点:

    • 确保在任何情况下都不会达到 20 亿列的限制
    • 整个宽行存储在同一个节点上:它需要适合磁盘。此外,如果您的某些日期访问频率高于其他日期(例如今天),那么您可以在存储当天数据的节点上创建热点。
    • 但是,非常宽的行会影响性能:The Last Pickle 的 Aaron Morton 对此有一篇有趣的文章:http://thelastpickle.com/blog/2011/07/04/Cassandra-Query-Plans.html 它有些陈旧,但我相信这些概念仍然有效。

    要做出良好的表格设计决策,您需要了解所有典型的过滤条件。如果您有任何其他通常作为完全匹配过滤的字段,您也可以将它们添加到分区键中。

    【讨论】:

    • 感谢您的评论。达到 20 亿列限制的可能性很小。宽行不适合特定磁盘可能是这种情况。 cassandra 不处理这种行不适合磁盘的情况。它应该将数据传输到另一个节点,因为选择保存行的节点是内部存储引擎的决定。
    • Cassandra 中的数据分区由分区键驱动:Cassandra 使用简单快速的散列算法识别保存数据的节点。在这方面,宽行是一个单元,它不会在节点之间分割。最终尝试在分区键中引入其他字段(例如金融产品的 id,如果有意义的话,年份甚至月份)。
    • 如果散列算法识别出一个节点,该节点上的行最初不能适合或适合但随着宽行最终增长,那么 cassandra 是否将该行转移到其他机器?
    • Cassandra 不会在节点之间共享行,整行都放在单个节点上(现在不讨论复制)。没有实现传输机制,因为它会大大降低性能。您可以查看这篇文章以了解有关分区和复制的更多详细信息:datastax.com/resources/tutorials/partitioning-and-replication
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 2020-11-27
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多