为什么 CAP 定理中 RDBMS 不能容忍分区,但为什么它可用?

2024-02-24

关于 RDBMS 是 CAP 定理中的 CA,我不明白的两点:

1)它说RDBMS是not 分区容忍但 RDBMS 怎么样?any less比 MongoDB 或 Cassandra 等其他技术更具有分区容错性?是否有一种 RDBMS 设置可以让我们放弃 CA 以使其成为 AP 或 CP?

2) CAP 如何可用?是通过主从设置吗?就像当主人去世时,奴隶接管写入?

我是 DB 架构和 CAP 定理的新手,所以请耐心等待。


很容易误解 CAP 属性,因此我提供了一些插图以使其更容易理解。

一致性:一个问题Q将产生相同的答案A无论处理请求的节点如何。为了保证完全一致性,我们需要确保所有节点始终同意相同的值。不要与最终一致性相混淆,最终一致性是网络朝着使所有数据一致的方向发展,但有时却并非如此。

可用性:如果分布式系统收到查询Q它总是会为该查询生成答案。这不应该与“高可用性”混淆,这不是指有能力处理更高吞吐量的查询,而是指不拒绝回答。

分区容差:尽管存在分区,系统仍继续运行。这不是关于拥有“修复”分区的机制,而是关于容忍分区,即尽管分区仍然继续。

请注意,以下示例并未涵盖所有可能的场景。考虑以下标题:

一个例子CP:

该系统具有分区容忍性,因为尽管存在分区,其节点仍会继续接受请求;它是一致的,因为唯一提供答案的节点是那些维护与处理所有写入请求的主节点的连接的节点;它不可用,因为其他分区中的节点不提供它们收到的查询的答案。

示例:AP:

要么因为(分别)我们让从节点回复请求,无论它们是否能够到达主节点,要么因为其他分区中的从节点选择新的主节点,或者因为我们有一个无主集群,所以实现了可用性,因为所有问题都在解决答案 - 一致性被丢弃,因为两个分区都在回复,同时可能产生不同的状态。

示例:CA:

如果我们在发生分区时断开节点,我们可以确保最多有一个分区,这最终意味着网络不再分区,或者根本没有服务。这与分区容错相反,因为系统正在避免分区,而不是尽管分区仍然运行。在这些部分或完全断开的系统中保持一致性和可用性,因为所有工作节点(如果有)都具有相同的状态,并且所有收到的查询(如果有)都将得到答案 - 关闭节点不会收到查询。

回答问题:

  1. 在默认配置下,Cassandra 和 MongoDB 等数据库是分区容忍的,因为它们不会关闭节点来应对分区,而 MySQL 等 RDBMS 则会这样做。

  2. 可用性与主/从设置关系不大,例如Cassandra 是无主的并且非常可用,因为哪个节点失效并不重要。至于主/从设置中的可用性,当主服务器死亡时,没有理由停止响应所有查询,但您可能需要在选择新主服务器时暂停写入操作。

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

为什么 CAP 定理中 RDBMS 不能容忍分区,但为什么它可用? 的相关文章

  • Google数据存储-在没有热点的情况下对创建日期字段进行索引

    我正在使用 Google Datastore 需要查询它来检索一些实体 这些实体需要按从最新到最旧的顺序排序 我的第一个想法是拥有一个包含时间戳的 date created 属性 然后我会索引该字段并对该字段进行排序 这种方法的问题是它会导
  • CouchDB 和 Couchbase 有什么区别?

    之间有什么本质区别吗CouchDB http couchdb apache org and 沙发底座 http www couchbase com 我认为CouchDB和Couchbase Server之间有一些本质的区别需要指出 我不会写
  • MongoDB 中的双向嵌入与单向嵌入(多对多)

    我想与您讨论一下 在 MongoDB 中建模 N M 关系时 使用双向嵌入而不是单向嵌入是否有意义 假设我们有两个实体 AProduct可以属于许多 少数 类别 and a Category可以有很多 很多 Products 两种方式嵌入
  • 寻找一个轻量级的java兼容内存键值存储[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Berkeley DB 可能是最好的选择 但由于许可问题我无法使用它 还有其他选择吗 你可以试试榛卡斯
  • 存储/访问有向图的最佳方式

    我有大约 3500 个防洪设施 我想将它们表示为一个网络来确定水流路径 本质上是一个有向图 我目前正在使用 SqlServer 和 CTE 递归地检查所有节点及其上游组件 只要上游路径没有大量分叉 这就可以工作 然而 由于增加了上游的复杂性
  • hadoop map reduce 中的错误处理

    根据文档 有几种方法可以在 MapReduce 中执行错误处理 以下是一些 A 使用枚举的自定义计数器 每个失败记录的增量 b 记录错误并稍后分析 计数器给出失败记录的数量 然而 为了获取失败记录的标识符 可能是其唯一键 以及发生异常的详细
  • Cassandra - 使用主键列的任意子集按主键搜索

    是否有可能在 Cassandra 中找到主键与所有主键字段的任意子集匹配的记录 Example 使用下面描述的表 可以找到主键具有特定的记录type and name没有指定id or size CREATE TABLE playlists
  • 在 postgresql 中生成自动 ID

    用户表 ID Name 1 usr1 2 usr2 3 usr3 上表中 ID为主键 我的要求是在将数据插入表中时 我只想指定 名字像INSERT INTO user VALUES usr4 执行查询后 有没有办法自动为 usr4 创建ID
  • Cassandra cli:将十六进制值转换为人类可读的格式

    我开始于卡桑德拉 questions tagged cassandra 当我跑步时list or get命令在cassandra cli questions tagged cassandra cli 我得到这样的结果 default use
  • 使用 NoSQL 文档存储数据库有哪些实际用例?

    在过去的几天里 我一直在阅读文档并观看特定于 Mongo DB 的截屏视频 我不知道像这样的解决方案何时会比典型的 pg 或 mysql 环境更好 具体来说 我的问题是在什么情况下 有用例就很好 你会选择 nosql 路线 Thanks 许
  • 数据库查询的内部实现

    根据我的经验 我使用过很多查询 例如select order by wheremysql sql server oracle 等中的子句等 有那么一刻我想 1 内部是如何编写来实现上述查询的 2 他们使用哪种语言 3 那是编程语言吗 如果是
  • Apache Spark 中的混洗与非混洗合并

    在将 RDD 写入文件之前执行以下转换时 它们之间有什么区别 合并 1 随机播放 true 合并 1 随机播放 假 代码示例 val input sc textFile inputFile val filtered input filter
  • 在 RDBMS 中何时使用三元关系而不是聚合?

    我想知道什么时候可以表示实体集和三元关系之间的关系 我明白聚合的好处 但是如果实体集和关系集之间的关系中没有属性 为什么还要使用聚合呢 例如 一名研究生 具有学生编号和姓名 正在从事一个项目 具有 pid 开始日期和结束日期 并且学生从事的
  • 如何解决postgresql中group by和聚合函数的问题

    我正在尝试编写一个查询来划分两个 SQL 语句 但它显示了我 ERROR column temp missed must appear in the GROUP BY clause or be used in an aggregate fu
  • 将计算列设置为非空时遇到问题

    我在将计算列设置为时遇到问题not null 我想要实现的是C001 C002 等 同时将其设置为not null 我在论坛上读到 这可以通过使用 NULL 值的默认值 0 来实现 E g ISNULL Price Taxes 0 我尝试应
  • 如何:SQL 还是 NOSQL?

    我还没有遇到过这个问题 但这就是我的想法 非常肤浅和简单化恕我直言 如果您有键值类型的存储 并且所有访问都是键查找 请使用 NOSQL 解决方案 如果您想要基于值 和子值 进行查找或者有一些更复杂的东西 例如联接 您会选择关系解决方案 事务
  • ScyllaDB 是否支持 OR 运算符?

    scyladb 中 SELECT 语句的 WHERE 子句中的 OR 条件如何工作 我已经在电子邮件上创建了二级索引 下面的查询工作正常并返回结果 cqlsh gt select from test d emp where email em
  • redis - 使用哈希

    我正在使用 redis 为我的 Web 应用程序实现社交流和通知系统 我是 redis 的新手 我对哈希值及其效率有一些疑问 我读过这篇很棒的文章Instagram 帖子 http instagram engineering tumblr
  • 通过分布式数据库聚合作业优化网络带宽

    我有一个分布式 联合数据库 结构如下 数据库分布在三个地理位置 节点 每个节点集群有多个数据库 关系数据库是 PostgreSQL MySQL Oracle 和 MS SQL Server 的混合体 非关系数据库是 MongoDB 或 Ca
  • Hive - 线程安全的自动递增序列号生成

    我遇到一种情况 需要将记录插入到特定的 Hive 表中 其中一列需要是自动递增的序列号 即在任何时间点都必须严格遵循 max value 1 规则 记录从许多并行的 Hive 作业插入到这个特定的表中 这些作业每天 每周 每月批量运行 现在

随机推荐

  • 如何在 MacBook Air 上的 iOS 模拟器中滚动?

    我有一个滚动视图和一个嵌入的 UIImageView 代码是正确的 但我无法在模拟器中滚动 可能是因为我有触控板 而不是鼠标 或者我可以吗 您需要启用 3 指拖动 从 Apple 菜单中选择 系统偏好设置 单击辅助功能图标 在侧边栏中选择
  • 如何禁用 openssl 中的特定密码套件?

    我想保护我的服务器免受 FREAK 攻击 因此我想禁用所有使用 Openssl 导出级 RSA 密钥的密码套件 有没有办法禁用 openssl 中的特定密码套件 如果是 我该怎么做 有没有办法禁用 openssl 中的特定密码套件 如果是
  • 内存限制=80M。 imagecreatefromjpeg() 的最大图像尺寸是多少?

    我有一个虚拟主机 最大内存限制为 80M 即 ini set memory limit 80M 我正在使用使用函数 imagecreatefromjpeg 的照片上传 当我上传大图片时出现错误 致命错误 允许的内存大小 83886080 字
  • 使用 then() 使函数在节点中顺序运行

    我想在序列总线中运行循环函数 该函数总是异步的 有什么方法可以使其同步而不使用回调或任何外部库 file 1 var db require promiseUnderStanding var fun function for var i 0
  • 如何求两个表的总和?

    我有两个表 第一个名称是 销售 第二个名称是 项目 两个表中都有相同的 code 和 qtd 列 我想编写 MYSQL 查询 我需要两个表中的 sum qtd 其中两个表中的代码相同 对于单表 我正在使用这个 按代码从销售组中选择代码 su
  • FORTRAN 95:是否可以在不共享源代码的情况下共享模块?

    我希望能够共享 FORTRAN 95 模块而不共享其源代码 是否可以这样做 也许通过共享 MOD 文件 如果这是相关的 我在 Plato 上使用 Silverfrost FTN95 编译器 到目前为止 我只能通过使用外部模块的源代码来完成这
  • 为什么 _mm_mulhrs_epi16() 总是进行有偏舍入到正无穷大?

    有谁知道为什么pmulhrsw指示或 mm mulhrs epi16 x RoundDown x y 16384 32768 总是向正无穷大舍入 对我来说 这对负数有很大的偏差 因为像 0 6 0 6 0 6 0 6 这样的序列平均起来不会
  • C++ 矢量 和套接字

    有没有办法调用 send recv 传递向量 在 C 中缓冲套接字数据的好习惯是什么 例如 读取直到 r n 或直到 upper bound 4096 字节 std vector
  • Rails错误resource_name - devise帮助路由和渲染

    我正在尝试渲染 Devise gem 的登录视图 但出现错误 下面是我当前拥有的代码 这是我的views users shared links html erb br br
  • C# SerialPort.IsOpen 在物理断开连接时返回 true

    当物理断开 USB 端口上的串行电缆时 C SerialPort IsOpen 返回 true 任何人都可以帮助我如何克服这个问题 这不是串行端口的工作方式 它们没有像 TCP 这样的标准面向连接的协议 IsOpen 名称的选择并非偶然 它
  • 为什么我的反应本机组件重叠

    我想将 2 个组件放置在彼此下方 我的组件如下所示 import React from react import connect from react redux import Text StyleSheet View ListView S
  • WPF:删除样式列表框中焦点项目周围的虚线边框

    我有一个带有自定义 controlIemplate 的水平列表框 选定的项目在聚焦时会出现一个虚线框 有人知道如何摆脱它吗 您需要将每个 ListBoxItem 的 FocusVisualStyle 设置为 null 步骤如下 1 为Lis
  • Keras:可视化 ImageDataGenerator 输出

    我想看看我的 ImageDataGenerator 为我的网络带来了什么 Edit 删除了channel shift range 不小心将其留在了代码中 发电机 genNorm ImageDataGenerator rotation ran
  • 在Java中将位图图像转换为未压缩的tif图像

    我正在尝试将位图图像转换为未压缩的 tif 文件 以便与 Tesseract OCR 引擎一起使用 我可以使用这种方法来生成压缩的tif文件 final BufferedImage bmp ImageIO read new File inp
  • 将 ereg_replace 转换为 preg_replace

    我必须转换一个ereg replace to preg replace ereg replace 代码是 ereg replace 0 9 36 1 value 由于 preg 由开始和结束反斜杠表示 我假设转换为 preg replace
  • JQuery Mobile 在 Android 上看到黑色覆盖块

    我当前创建了一个使用 JQueryMobile 和 Phonegap 构建的示例应用程序 它是一个简单的应用程序 没有什么特别的 它旨在在 Android 平台上运行 适用于手机和平板电脑 我的应用程序上有一个页面 显示一个带有黑色 透明背
  • 使用jquery更改rgba alpha透明度[重复]

    这个问题在这里已经有答案了 可能的重复 jQuery RGBA 颜色动画 https stackoverflow com questions 3242368 jquery rgba color animations hey 我想更改悬停时
  • 我应该用 ; 结束表达式吗?在循环内?

    我刚开始学习 Rust 经常有一些找不到答案的问题 我真的不知道如何以及在哪里发布我的问题 所以我会尝试这样做 我开始阅读网站上的 Rust 文档 并做了猜谜游戏示例 我意识到match cmp循环内的表达式可以变成语句 并且一切仍然有效
  • SpringBoot - 解析 HTTP 请求标头时出错(Oauth2 https 端点)

    当我尝试从 Spring Boot 应用程序访问 OAuth HTTPS 端点时 出现以下错误 但 HTTP 端点工作得很好 Error 2018 07 24 10 25 06 292 DEBUG 8464 https jsse nio 8
  • 为什么 CAP 定理中 RDBMS 不能容忍分区,但为什么它可用?

    关于 RDBMS 是 CAP 定理中的 CA 我不明白的两点 1 它说RDBMS是not 分区容忍但 RDBMS 怎么样 any less比 MongoDB 或 Cassandra 等其他技术更具有分区容错性 是否有一种 RDBMS 设置可