Cassandra 提交日志澄清

2023-11-21

我已经阅读了有关 Cassandra 提交日志的多个文档,对我来说,有关此“结构”的信息存在冲突。该图显示,当发生写入时,Cassandra 会写入内存表和提交日志。令人困惑的部分是该提交日志所在的位置。

我反复看到的图表显示了磁盘上的提交日志。但是,如果您进行更多阅读,他们还会讨论内存中的提交日志缓冲区 - 并且该内存块每 10 秒刷新到磁盘。

DataStax 文档指出: “当发生写入时,Cassandra 将数据存储在名为 memtable 的内存结构中,为了提供可配置的持久性,它还会将写入附加到内存中的提交日志缓冲区。该缓冲区每 10 秒刷新到磁盘”。

在他们的图表中没有任何地方显示称为提交日志缓冲区的内存结构。它们仅显示驻留在磁盘上的提交日志。

它还指出: “当发生写入时,Cassandra 将数据存储在内存中的结构(memtable)中,并将写入附加到磁盘上的提交日志中。”

所以我对上面的内容很困惑。它是写入提交日志内存缓冲区,最终刷新到磁盘(我假设也称为“提交日志”),还是写入磁盘上的内存表和提交日志?

Apache 的文档是这样描述的: “相反,像其他现代系统一样,Cassandra 通过首先将写入附加到提交日志来提供持久性。这意味着只有提交日志需要进行 fsync,如果提交日志位于其自己的卷上,则无需进行查找,因为commitlog 是仅追加的。实现细节在 ArchitectureCommitLog 中。

Cassandra 的默认配置将 commitlog_sync 模式设置为定期,导致提交日志每 commitlog_sync_period_in_ms 毫秒同步一次,因此如果所有副本在该时间窗口内崩溃,您可能会丢失那么多数据。”

我从 Apache 声明中推断出的是,仅由于写入的异步性质(缓存写入的确认),您才会丢失数据(它甚至指出,如果所有副本在刷新/同步之前崩溃,您可能会丢失数据) 。

我不确定我可以从 DataStax 文档和图表中推断出什么,因为他们提到了关于提交日志的两种不同的语句 - 一种在内存中,一种在磁盘上。

任何人都可以澄清我所认为的一组措辞不当且相互矛盾的文档吗?

我假设有一个提交日志缓冲区,因为它们都引用它(但 DataStax 没有在图中显示它)。我认为,如何以及何时进行管理是理解的关键。


通常,在解释写入路径时,提交日志被描述为文件 - 提交日志确实是提供持久性的磁盘存储机制。当更深入时,会引入混乱,并引入有关缓冲区缓存和必须发出 fsync 的部分。对“内存中的提交日志缓冲区”的引用是指操作系统缓冲区缓存,而不是 Cassandra 中的内存结构。您可以在code提交日志没有单独的内存结构,而是将突变序列化并写入文件支持的缓冲区.

Cassandra 提供了两种管理提交日志上的 fsync 的策略。

commitlog_sync 
    (Default: periodic) The method that Cassandra uses to acknowledge writes in milliseconds:
    periodic: (Default: 10000 milliseconds [10 seconds])
    Used with commitlog_sync_period_in_ms to control how often the commit log is synchronized to disk. Periodic syncs are acknowledged immediately.

    batch: (Default: disabled)note
    Used with commitlog_sync_batch_window_in_ms (Default: 2 ms) to control how long Cassandra waits for other writes before performing a sync. When using this method, writes are not acknowledged until fsynced to disk.

The periodic提供更好的性能,但代价是数据丢失的可能性略有增加。这batch设置以延迟为代价保证持久性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cassandra 提交日志澄清 的相关文章

随机推荐

  • Musicbrainz 指纹识别

    我一直忙于了解音乐大脑在过去的几个小时中 我注意到没有命令行应用程序来标记或指纹音频文件 Musicbrainz 的指纹识别有任何 CLI 实现吗 我怎样才能创建这些指纹 我找到了一些开发工具在他们的网站上 python musicbrai
  • Android 测试 BuildConfig 字段

    假设我的build gradle文件为中定义的同一变量定义了不同的值BuildConfig android def INTEGER integer def VARIABLE variable buildTypes release build
  • 如何在databricks中使用通配符列出文件

    我想列出 adls 文件夹中的所有镶木地板文件 dbutils fs ls abfss path to raw files parquet 有没有办法让上面的语句发挥作用 您可以使用 Magic Commands 来使用 shell 命令来
  • AWS CodePipeline 不将构件上传到 AWS S3

    As an effort to automate the Android build and test process I configured an AWS code pipeline that will 1st get the code
  • Python 遍历字符

    我一直在尝试通过中值字符串搜索 ACGT 基因组中的序列 我遇到的问题是从 AAAAAAAA 到 AAAAAAAC 等等 直到我尝试了所有可能的组合 我本质上是通过创建两个列表来进行暴力破解 一个包含 A C G T 另一个包含 8 个字符
  • 如何使用Python从txt文件中删除特殊字符

    from glob import glob pattern D report shakeall txt filelist glob pattern def countwords fp with open fp as fh return le
  • Android 12 设备所有者配置

    我有一个应用程序 可以通过下面的 JSON 中的 QR 码在 Android 12 及以上的设备上成功设置为设备所有者 android app extra PROVISIONING DEVICE ADMIN COMPONENT NAME p
  • JSON-RPC Swagger 组合

    我正在考虑为我的 Web 服务实现 JSON RPC这个图书馆 我也想实施Swagger为我服务 但是 我不确定这两者是否是一个很好的组合 在 JSON RPC 中 所有方法都位于同一资源后面 而这在 Swagger 中没有任何意义 我想知
  • 使用 Jackson 模块和 ScalaObjectMapper 在 Spark 1.4.0 上运行作业时出错

    我正在运行一个用 Scala 2 10 4 编写的 Spark 作业 并在 Spark 1 4 0 集群上运行 基于 HDFS 并使用 YARN 进行管理 并在 Maven 存储库上使用 Jackson 模块版本 2 6 1 当从我的 ID
  • 运行 Python 3.5 解释器需要哪些标准库模块?

    这是一个 CPython 程序 它尝试用空的初始化解释器sys path include
  • 确定 UIImage 的主要颜色和次要颜色

    我想知道是否有人可以帮助我弄清楚如何确定 UIImage 中的主要原色和次要颜色 我在谷歌中找不到任何非常有用的东西 基于上面的 Panic 博客 这里有一个快速方法 接受 UIImage 输入和输出 背景色 原色 次要颜色 将 UIIma
  • 将数据框行转换为列名称

    有没有快速的方法 部分tidyverse也许是 API 将行转换为列名data frame or tibble 有点类似于tibble column to rownames 我意识到有很多方法可以做到这一点 例如有点笨拙 gt df lt
  • 如何获取Assets文件夹中文件的android路径字符串?

    我需要知道字符串路径到资产文件夹中的文件 因为我使用的地图 API 需要接收字符串路径 并且我的地图必须存储在资产文件夹中 这是我正在尝试的代码 MapView mapView new MapView this mapView setCli
  • Jquery 选择器的逻辑 AND

    我想设置为检查按值和名称输入的复选框
  • 如何重用matplotlib.Axes.hist的返回值?

    假设我想绘制两次相同数据的直方图 import matplotlib pyplot as plt fig plt figure figsize 8 6 ax1 ax2 fig subplots nrows 2 ncols 1 ax1 his
  • Flutter:如何将拇指图像添加到滑块?

    我尝试将图像添加到滑块拇指 但我不知道它应该如何工作 在SliderThemeData我们没有用于添加缩略图的参数 我已经绑定使用SliderComponentShape用于绘制拇指 但它不起作用 class TimeReportTextF
  • Django - makemigrations - 未检测到任何更改

    我试图使用 makemigrations 命令在现有应用程序中创建迁移 但它输出 未检测到更改 通常我使用以下方式创建新应用程序startapp命令 但在我创建该应用程序时并未将其用于此应用程序 经过调试 我发现它没有创建迁移 因为migr
  • 名称为“mainController”的控制器未注册

    我的 script js 文件中有这段代码 var mainController function scope scope message Plunker 这是我的 HTML
  • 如何在cmake中添加库路径?

    我的项目中有 2 个文件夹 inc 和 lib 分别具有标头和静态库 我如何告诉 cmake 分别使用这两个目录进行包含和链接 最简单的方法是添加 include directories CMAKE SOURCE DIR inc link
  • Cassandra 提交日志澄清

    我已经阅读了有关 Cassandra 提交日志的多个文档 对我来说 有关此 结构 的信息存在冲突 该图显示 当发生写入时 Cassandra 会写入内存表和提交日志 令人困惑的部分是该提交日志所在的位置 我反复看到的图表显示了磁盘上的提交日