爆栈思想 - 数据库技术的革新

灵感之源 发布于 2018年07月13日 | 更新于 2020年08月22日
无人欣赏。

来自 爆栈网 kayow.com

前言

数据库是大中小型系统的基石,所有操作,最终都需要和数据打交道,一切来源自数据,一切回归数据。

传统的非关系型数据存储

XML、JSON、CSV等文件,没有关系约束。

关系型数据库系统RDBMS

传统关系型数据库系统很难横向扩展(scale-out),很多时候我们都是仔细设计怎么对数据进行分库分片,可能垂直拆分(业务给表分块),也可能是水平拆分(表按时间、地区、自增ID等切分),还可能混合拆分。

传统关系型数据库因为追求强一致性,所以一般高可用性是通过各种形式的日志备份(log backup/log shipping等)。

分布式

当单机无法支撑业务的时候,我们可能会优先考虑升级硬件(scale-up),但单机迟早有物理限制(譬如有些机器最多支持1TB的内存),这种情况下,我们会实现分布式,所谓的scale-out。

但是,根据CAP理论,一般分布式系统做不到C(强一致性),所以他们会实现2PC(Two Phase Commit,二阶段提交)。

NoSQL

NoSQL天生支持分布式、多节点、高可用性,高性能是他们的卖点,但他们一般只强调A(高可用性)和P(分区容错),而做不到或者很基础的支持C。

MongoDB

MongoDB是NoSQL界的旗帜,他们无孔不入的宣传手段让这个问题诸多的解决方案成为很多公司的首选。

坑这么多的 MongoDB 到底是怎么做起来的?其背后的公司运作得不错:在各地区搞了用户组,给组长资金支持,组长办线下活动、找“专家”开讲座/写博客违心地夸奖 MongoDB,文章在这里《MongoDB 背后的营销策略》。

NewSQL

而如MongoDB之类的NoSQL虽然天生支持scale-out,但无法解决CAP定理指出的问题: 一致性、可用性、分区容错三者不可兼得

所以NewSQL的出现尝试解决这个问题,他们的目标是拥有NoSQL的高可用性和分区容错,还拥有传统关系型数据库系统的强一致性。

CockcroachDB

CockcroachDB是相对成熟的新型分布式数据库系统,底层基于PostgreSQL,所以支持传统的SQL查询,做得相当智能,可以自动根据数据的访问频率来把热点数据推送到最近的节点。

特点:是CP非A(强一致性和分区容错),兼容PostgreSQL。

官网在这里,开源。

Fauna

Twitter一些工程师离职后搞的数据库系统,高可用性、高性能、分布式、支持最严格的ACID。这篇文章拿MongoDB 4.x支持ACID来比较,实际上MongoDB并不支持强ACID,而且只有他们收购的WiredTiger引擎才支持,而且只支持本地节点而已。

官网在这里

ActorDB

分布式数据库,特别适合作为手机App的服务器端存储,开源项目

比较

其实,大部分的观点是,NoSQL比传统关系型数据库快,这个定义必须明确一下:

NoSQL的存取是读写一个文本(主要是JSON/B SON格式),一般没有外键约束等检查,没有关联查询,所以简单粗暴的操作是来得快 关系型数据库系统,一般的读写要做以下操作

    • 规范化:一条记录根据业务关系拆分别存储到不同的表
    • 外键约束
    • 更新索引

    -读

    • 关联表

所以你看见,关系型数据库系统,需要额外的操作,自然会“慢”。但是,说传统关系型数据库就是慢的同学,估计没有用Bulk Copy。

应用场景

你要去探望在小溪的对面的邻居,你会走桥、坐船、开汽车、坐飞机还是乘宇宙飞船过去呢?

同理,不同的场景用不同的数据库系统。

来自 http://kayow.com/2018/07/database_revolution/

暂无回复
登录 或者 注册