数据库专题:数据库初学者的数据一致性

news2024/11/26 11:53:57

在这篇文章中,我将分享我在数据库学习课程中学到的知识,了解到目前为止让我着迷的数据库主题。


​1:序言

在 2022 年底,当主题是数据库时,我决定把事情弄清楚,因为这总是一种痛苦,作为后端开发人员,很高兴讨厌复杂的数据库查询。考虑到这一点,我挑战自己从头开始,为了好玩而了解这个未被充分探索的世界。

2:MySQL不是唯一的选择

我没有完成大学学业,在那里时我没有看到任何关于数据库的东西,所以我没有任何理论背景,在这 4 年的企业级编码中,我的重点完全在于:Clean Code,  SOLID、 设计模式 和其他与代码相关的东西,而我唯一的数据库知识是关于 SQL/MySQL 和 缓存/ Redis的。

在前五分钟的搜索和在 Twitter 上询问推荐的内容后,我看到了这个名为“7 个数据库范例”的视频,这彻底颠覆了我的认知。原来不仅有键值和关系型数据库?这是怎么回事?

以下是不同范式及其具体实现的列表:

  • 键值(Key Value):Redis

  • 宽列(Wide Column):Apache Cassandra、ScyllaDB 和 DynamoDB

  • 文档(Document):MongoDB

  • 图(Graph):Neo4J

  • 关系(Relational):MySQL、MariaDB、PostgreSQL

  • 搜索引擎(Search Engine):ElasticSearch

  • 多模型(Multi-model):FaunaDB、MongoDB、Redis 等。

3:SQL 与 NoSQL

由于我们正在尝试接受新的挑战,因此我的主要重点是脱离我感到舒适的一切,研究我以前从未见过的东西,其中包括我在NodeJS世界中经常听到的这个词:NoSQL。

我知道SQL(结构化查询语言)被MySQL、OracleDB、SQLServer等使用,但我从未试图理解为什么会有这样一种“反SQL”或“反SQL”,所以我深入挖掘了解了这种差异的本质:

// Structuredtable: usersid: intname: stringtable: user_addressesid: intuser_id: int references id in usersaddress: stringtable: users--------------------| id | name        || 1  | danielhe4rt |--------------------table: user_addresses---------------------------------------------------------| id | user_id | address                                || 1  |  1      | Flowers St. 123, São Paulo/SP - Brazil |---------------------------------------------------------

SQL 由以下因素驱动:表、行和列

// database-prod.json{"users": ["huid2d12bdh12b": {"id": 1,"name": "danielhe4rt","addresses": ["jio32fsdyhis": {"address": "Flowers St. 123, São Paulo/SP - Brazil"                }            ]        }    ]}

NoSQL 由以下因素驱动:文档、集合和字段。

我注意到的一件事是 NoSQL 有许多很酷的功能可以研究,因为我们有键值对、文档和列式数据库等选项可供研究。

我选择了列式数据库作为深入研究的对象,因为我发现了两个很酷的主题,即复制因子和一致性级别,我想探讨一下,但首先我们需要谈谈 CAP 定理。

4:明智的选择

基于数据库的CAP定理

一位叫做 Eric Brewer 的大佬指出,分布式数据存储只能提供以下三种保证中的两种:一致性、可用性和分区容忍性。好吧,如果你足够理智,你可以同时拥有所有三个特性,但这是另一篇文章的主题。

好吧,这些东西有什么意义?为什么我应该关心它们?这定理不是一些无聊的数学东西吗?不,不是,所以请跟我走!就像我所说的,我们需要理解这些基石:

  • 可用性:你的数据存储在不同的节点上,如果其中几个节点失败了,你仍应该能够使用这些数据。

  • 一致性:你更新了一些数据,但没有保证这是最近的写入,因为复制操作还没有在其他数据中心完成,但可以使用一致性级别进行配置。

  • 分区容忍性:如果副本/节点之间的通信出现故障,我还能继续操作吗?

到这里,我们已经有了很多概念需要理解,并在我们的旅程中不断努力,但现在我们将看到最后一步和我想要写这篇文章的原因:宽列数据库范例!

5:最酷的数据库范例

没错,我认为最酷的数据库范式是宽列数据库(Wide Column Database),并且我将用四个主题来解释为什么:

  1. 范式;

  2. 基于这个范例构建的数据库;

  3. 复制因子;

  4. 一致性级别。

5.1 范式 

想象一下,你在建模时不是按 SQL 语言所期望的行进行思考,而是按列进行思考。这些列是灵活的,因为它们基于集合,我们可以说建模是灵活的,并且您需要模式来运行查询。

说到查询:这个范式不应该是 NoSQL 吗?嗯,并不完全是。有一个叫做 Apache Cassandra 的数据库引入了 CQL 或 Cassandra Query Language。那么它们之间有查询的联系吗?

在 SQL 中支持联接,而在 CQL 中不支持。查询语言的编写看起来在两种查询语言中都很相似。

5.2 Cassandra 和 ScyllaDB 

使用 Wide Column 的最著名的数据库仍然是 Cassandra,尽管还有很多开发人员选择它,因为他们还没有遇到像 ScyllaDB 这样值得的 Cassandra 竞争对手。

它们之间有什么区别?它们使用相同的范式,所以它们应该是差不多的... 对吧?

并不是这样。Apache Cassandra 是一个使用 Java 构建的开源工具,而 ScyllaDB 是出于改进这个数据库范式的读写操作的需要而产生的全新级别的工具。

ScyllaDB 是用 C++ 编写的,这接近于低级语言,因此性能提高了 2 倍到 8 倍。沿着这条路走,它必须更便宜,因为它更高效。此外,ScyllaDB 使用与 Cassandra 相同的驱动程序,因此您可以轻松从 Cassandra 切换到 ScyllaDB。

现在我们可以去了解最酷的功能了。

5.3 复制因子(RF) 

Cassandra和ScyllaDB支持的一个功能是复制因子,这是一个标志,允许你在一行中写入并将给定的数据复制到所有可用的下一个节点。

如果你将RF设置为3,当你存储任何数据时,它应该被复制到三个下一个节点,并保证即使主节点丢失数据,你仍然拥有数据。有SimpleStrategy标志,表示在本地集群中复制,NetworkTopologyStrategy表示在多个数据中心中复制。

5.4 一致性级别 

现在我们可以谈论关于写入操作的真实性,为此我们需要理解为什么一致性级别如此重要。

想象一下你在法庭上,你讲述关于你对任意一个随机话题的清白,当地和虚拟陪审团应该根据规则做出决定,规则可以是以下之一:ONE、QUORUM、LOCAL_QUORUM和ALL。

  • 如果法官决定规则是ONE,那么只有一个陪审团成员需要投票支持你的清白。

  • 如果法官决定规则是QUORUM,则需要51%的当地和远程陪审团投票支持你的清白。 

  • 如果法官决定规则是LOCAL_QUORUM,则需要51%的当地陪审团投票支持你的清白。 

  • 如果法官决定规则是ALL,则需要100%的当地和远程陪审团投票支持你的清白,你可能就惨了。

同样的原则可以应用于数据库生态系统。如果你在主数据库中写入数据,并且你的CL是QUORUM,则必须在其他磁盘上写入数据,直到占多数为止,才能将数据标记为已写入。酷毙了,不是吗?

我写这篇文章的原因只是因为我喜欢这两个特性如何结合起来可以让你安心睡觉,因为你知道你的数据在各处都有副本,如果你配置得当,几乎不会丢失。


作者:Daniel Reis

更多技术干货请关注公众号“云原生数据库”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/513574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚拟汽车加油问题——算法设计与分析(C实现)

目录 一、问题描述 二、问题剖析 三、代码实现 四、结果验证 一、问题描述 问题描述:一辆虚拟汽车加满油后可行驶n km。旅途中有若干加油站。设计一个有效算法,指出应该在那些加油站停靠加油,使沿途加油次数最少。并证明算法的能产生一个…

安卓Webview网页秒开策略探索

1 人赞同了该文章 痛点是什么? 网页加载缓慢,白屏,使用卡顿。 为何有这种问题? 1.调用loadUrl()方法的时候,才会开始网页加载流程 2.js臃肿问题 3.加载图片太多 4.webview本身问题 webiew是怎么加载网页的呢&…

品优购项目学习记录--01公共模块制作

文章目录 一、品优购项目规划1.1 开发工具以及技术栈1.1.1 开发工具1.1.2 技术栈 1.2 品优购项目搭建工作1.2.1 相关文件夹以及文件创建1.2.2 模块化开发1.2.3 网站favicon图标1.2.4 网站TDK三大标签SEO优化 二、品优购首页制作2.1 常用模块类名命名2.2 快捷导航shortcut制作2.…

传统的二次开发有哪些痛点问题?低代码平台帮你解决

一、什么是二次开发呢? 简单的来讲,二次开发就是在原有得软件中进行功能等方面得修改或者扩展,但是不改变原有系统的内核。 二、传统的二次开发有哪些痛点问题? 很多企业在业务发展的过程中会产生各种各样不同得需求&#xff0…

融云亮相「中国信息技术应用创新大会」,入选数字化转型优秀方案集

4 月 27 日,以“全栈创新 从可用到好用”为主题的“2023 第六届中国信息技术应用创新大会”在京顺利召开。移步【融云全球互联网通信云】回复“地图”限量免费领《社交泛娱乐出海作战地图》 大会以“论坛展示展览”的方式,全面、深入地反映信创产业的最新…

基于Android studio的机票管理app设计与开发案例

一 功能介绍 1. 用户模式功能: 用户注册登录功能(账号、密码);航班信息(航班号、起飞时间、登机时间、起点、终点、登机口);购买机票机票信息(航班号、审核状态、乘客姓名、联系方…

Windows平台Qt超详细安装——5.9.6版本以及5.9都差不多,(仔细看,一定学会,学不会怪我)

目录 一、Qt 开发环境(Windows) 二、设置 QtCreator 编译路径 三、设置 Qt 源码路径 四、QtCreator 介绍 一、Qt 开发环境(Windows) ①官网下载地址:(对应版本,可以在这个网址下面自己找&a…

字节给的比我想的还多?网友看完:打死也要去

曾经的互联网是PC的时代,随着智能手机的普及,移动互联网开始飞速崛起。而字节跳动抓住了这波机遇,2015年,字节跳动全面加码短视频,从那以后,抖音成为了字节跳动用户、收入和估值的最大增长引擎。 自从字节…

【2023考研】双非末流二本非科班一战上岸杭电经验帖

一、作者背景 我本科就读于黑龙江省某末流二本双非大学的物联网工程专业,专业排名一般就在20%左右,在校期间无科班竞赛经验,只参加过大学生数学竞赛和杭电要求的PAT考核乙级,项目方面只参加过大创比赛以及专业的课程设…

短视频矩阵多账号系统应用技术开发.源码

抖音矩阵号管理系统是一款用于管理抖音矩阵号的软件,具有如下特点: 1. 用户管理:支持多用户管理,可以指定每个用户对应的抖音矩阵号。 2. 粉丝管理:支持实时查看粉丝数量、关注者数量、点赞数量等统计数据&#xff0c…

学系统集成项目管理工程师(中项)系列20_变更管理

1. 许多项目失败的原因就是由于对变更的处理不当 2. 变更管理是为了使项目实际执行情况和项目基准相一致而对项目变更进行管理,其可能的结果是拒绝变更或调整基准 3. 分类 3.1. 性质 3.1.1. 重大变更 3.1.2. 重要变更 3.1.3. 一般变更 3.1.4. 通过不同审批权…

【Linux】Linux权限,shell命令以及运行原理

之前我们一直敲得命令和口口声声说的shell到底是什么呢?命令行提示符和输入的指令并且可以执行都是通过命令行解释器来实现的,那么命令行解释器就是我们常说的shell,具体我们看下面! 目录 一、shell命令以及运行原理 二、Linux权…

百亿量化私募高薪急招C++

百亿量化私募高薪急招C! 秋招/校招/社招,21/22/23届可 base北上杭深 现招岗位:C量化系统开发工程师 年base40-80万bonus 通过这里找到我 slam_pan 工作职责 1. 参与交易平台的设计、开发与测试,实现交易策略、风控等需求; 2. 开发…

【DahO安装及使用】

1 安装 Step 1:官网注册帐号 注册地址在这里(注册完毕默认登录) Step 2:点击下载链接,下载你需要的版本 这里,我下载的是DashO的Windows版本。 下载完毕后官方会向您发送邮件,复制其中的&qu…

WMS和ERP的区别是什么

WMS和ERP是企业常用的两种管理软件,虽然它们都是管理企业资源的软件,但它们的功能和使用场景有所不同。 那么问题来了:很多工厂的管理者都知道自己已经购买或者计划购买的ERP中包含仓储管理模块,那么WMS和ERP系统中的仓储管理模…

node:常用的文件操作fs模块

文章目录 背景读写创建复制移动(重命名)是否存在删除示例1、文件内容替换2、文件夹内的所有文件内容替换 封装 背景 我们日常工作中,想要对前端做一些自动化操作的时候,免不了使用 node 的文件读写操作,今天来总结一下…

JVM 堆

堆的核心概述 一个 JVM 实例只存在一个堆内存,堆也是 Java 内存管理的核心区域Java 堆区在 JVM 启动的时候即被创建,其空间大小也就确定了。是 JVM 管理的最大一块内存空间堆可以处于物理上不连续的内存空间中,但是在逻辑上它应该被视为连续…

久戴不痛的蓝牙耳机有哪些?久戴不痛的蓝牙耳机推荐

现如今的都市青年离不开什么数码产品?抛开手机这一答案,耳机肯定是第一项,遇到嘈杂的车流声,轰鸣的地铁,安静的图书馆,蓝牙耳机可以可以让人更加沉浸在自己的世界里,很多烧友在选购时候除了对音…

MySQL基础(二十七)性能分析工具的使用

1. 数据库服务器的优化步骤 当我们遇到数据库调优问题的时候,该如何思考呢?这里把思考的流程整理成下面这张图。 整个流程划分成了观察(Show status)和行动(Action)两个部分。字母 S 的部分代表观察&…

全网最详细,性能测试场景模型分析,从0到1实施性能测试...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能测试&#xf…