【问题标题】:Cassandra: memtables on failureCassandra:失败时的内存表
【发布时间】:2015-09-22 12:26:25
【问题描述】:

我不太明白如果实例失败,memtables 中的数据会发生什么?由于写入在写入磁盘之前首先被推送到内存,如果实例失败,我们是否会丢失 memtable 尚未写入磁盘的所有信息?例如:

1) User 1 inserts something into Cassandra:
2) My application sees it has been inserted so it gives the user a notification it has been inserted.
3) The insert is inside the instance, and it fails before the commit log was full, so a flush did not occur to disk.

用户 1 刚刚丢失了他的数据吗?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    这取决于您如何配置提交日志。默认值是周期性的,它提供更好的性能但耐久性较低,或者您可以将其设置为批处理,在写入磁盘之前不会确认写入。查看更多信息here

    【讨论】:

    • 谢谢。这告诉了我我需要知道的一切。
    【解决方案2】:

    简短的回答是只有如果(如@Jim Meyer 所说)commitlog_sync 设置为periodic 并且所有副本在commitlog_sync_period_in_ms 内崩溃之后接收写入。

    【讨论】:

      【解决方案3】:

      如果数据被写入提交日志,那么它肯定不会丢失(除非磁盘损坏)。当节点再次启动时,未刷新的数据将从提交日志中重播。

      定期/批处理选项会影响数据写入提交日志的时间。如果节点在写入提交日志之前失败,是的,只有当您处于单个复制因子中时,数据才可能丢失。如果复制因子大于 1,则所有节点必须同时关闭,数据才会丢失。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-07
        • 2017-06-06
        • 2014-11-23
        • 2014-05-22
        • 2021-12-16
        • 2020-05-22
        • 2015-09-24
        相关资源
        最近更新 更多