前言
数据库是大中小型系统的基石,所有操作,最终都需要和数据打交道,一切来源自数据,一切回归数据。
传统的非关系型数据存储
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。
应用场景
你要去探望在小溪的对面的邻居,你会走桥、坐船、开汽车、坐飞机还是乘宇宙飞船过去呢?
同理,不同的场景用不同的数据库系统。
想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?
在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目,用最高效的办法达到你想要的高度。
爆栈之旅
是否想技术水平快速提升?是否希望快速成为公司的技术骨干?
-
把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
-
针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
-
解答各种技术问题
-
为公司提供技术解决方案
请查看本站右边的信息联系我。
版权所有
所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。