【问题标题】:Is Cassandra good for adhoc/bulk reads/writes? [closed]Cassandra 是否适合临时/批量读取/写入? [关闭]
【发布时间】:2022-01-21 16:16:25
【问题描述】:

我对何时使用像 Cassandra 这样的柱状数据库感到很困惑。我知道它们非常适合我们的用例主要是读取数据列的分析工作负载。但是,根据我对数据在 Cassandra 中的存储方式的理解,我预计写入的性能会降低,因为单个记录的属性分散在多个块中,因为每列的数据都放在一起,并且一条记录的数据对应于多个列. 但是,与我的直觉相反,我在互联网上看到一些资源说 Cassandra 非常适合写入,有些人说它非常适合仅附加工作负载。

因此,希望有人就 Cassandra 是否适合即席/批量读取/写入提供明智的意见。

【问题讨论】:

    标签: database cassandra system-design


    【解决方案1】:

    知道您阅读了哪些参考资料会很有趣,但它通常被称为“写入路径”,它有两个不同的部分 - 两者都必须出现,如下所示:

    1. 将记录放入代表要插入的表的 mem 表中。在某些情况下,这将刷新到磁盘以在磁盘上创建一个文件(称为 SSTable) - 但就确认写入而言,您无需担心这一点,它不需要等待此刷新。
    2. 插入/更新也必须放在提交日志中。默认配置是提交日志也在内存中,定期刷新,默认是每 10 秒。同样,写入确认无需等待此提交日志刷新。

    由于这两个操作都仅基于内存,因此写入通常会很快得到确认。

    这也有例外,例如比较和设置写入(CAS / LWT),以及一些内存表刷新可能成为阻塞操作的场景 - 但在数据库的正常操作中不应该是这种情况.

    提到仅附加工作负载的具体原因是某些类型的工作负载(例如充当队列的数据库表)不适合 Cassandra。这是由于 tombstone 生成(删除标记),或者如果不断修改行,这会导致每次读取需要从多个文件中读取该行,这对性能不利。在某种程度上,您可以使用一些设置和杠杆在一定程度上对其进行调整,但 Cassandra 中的“队列表”实现永远无法真正调整为可以接受。

    要获得更具体的建议,问题必须在建议的数据模型方面更详细,关键是您打算对表运行的查询。

    【讨论】:

      猜你喜欢
      • 2021-10-20
      • 2016-12-20
      • 1970-01-01
      • 2015-08-25
      • 2011-11-13
      • 2018-03-08
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多