更多数据库
# 250.更多数据库
简单讲讲除了MySQL之外,其他的一些数据库。
# 国产自研数据库
目前,国内市场主流的数据库,商业数据库有Oracle,SQL server以及DB2,传统+开源的有更多。
既然已经有了成熟的产品,为什么还要自研呢?
首先,商业数据库是很贵的。除了购买的时候要付钱,每年还有一大笔版权费(如果是大客户,费用高达上亿)。此外,如果Oracle出了问题呢?由于是商业产品,客户是没有源码的,无法自己排查,只能叫大洋彼岸的甲骨文员工前来解决。如果问题很紧急呢?也得等对方醒过来,再来调配。
那如果是开源的数据库呢?首先,大部分数据库都没Oracle这些商用的好。MySQL刚出来的时候,完全比不上Oracle,Oracle几乎是处于垄断地位。其次,如今MySQL 也被 Oracle 收购,转型成了半商用数据库。此外,如果开源的数据库有问题,是没后售后解决的,顶多有个社区维护。
在美国还出现过“棱镜门”。将自己的数据依赖于其他人的数据库,终究是不太可靠的,因此,只能自己想办法,例如搞一个数据库。国内不少大公司都曾去IOE化( I 是指服务器提供商IBM,O是指数据库软件提供商Oracle,E则是指存储设备提供商EMC,三者构成了一个从软件到硬件的企业数据库系统)。
目前,国家方面也有一些政策,要求国内的一些重要企业(例如国企,银行)逐步使用自研的数据库、自研的操作系统等。
国内的自研数据库有腾讯的TDSQL,阿里的PolarDB等。感兴趣的朋友,可以看看这篇文章:乘风破浪的中国数据库 (opens new window)
当然,也不是推荐大家使用国产数据库,用哪个得根据自身情况来考虑。一些小企业没有互联网企业那种专业的研发团队,也没有那么高的并发量和数据量,用Oracle这种商业数据库也没问题,除了贵几乎没其他问题,有问题还有售后支持。
# SQLite
如果问你哪个数据库产品是世界上使用最多的数据库,你认为是 Oracle、MySQL 还是 Microsoft SQL Server?
以上都不是,世界上安装使用最多的数据库是 SQLite。没错,就是这个小巧的嵌入式数据库引擎。所有的手机、电脑、浏览器以及无数的应用程序都内置了 SQLite 数据库,PHP 和 Python 语言也内置的 SQLite 支持,预计正在使用的 SQLite 数据库达到了一万亿(10^12^)以上。
以上内容来自CSDN:不剪发的Tony老师的博客 (opens new window),感兴趣的话可以参考其专栏。
一般情况下,Oracle、MySQL等是安装到服务器上的;而用户的电脑,手机等,是没有安装的;总不能让用户使用你的软件之前,自己先安装个数据库、配置数据库吧?
而SQLite可以解决这个问题,它是一个很小巧的数据库,可以只用一个文件保存数据库中的数据。
# NoSQL
推荐这篇科普文章:Sql Or NoSql,看完这一篇你就都懂了 (opens new window)
如果想实际体验一下,可以看看我的Redis教程 (opens new window),看完前4篇文章基本上就能简单理解Redis是什么了
# NewSQL
目前,数据库发展至今已经有3代了:
- SQL,传统关系型数据库,例如 MySQL
- noSQL,例如 Redis,MongoDB
- NewSQL
# SQL 的问题
互联网在本世纪初开始迅速发展,互联网应用的用户规模、数据量都越来越大,并且要求7 * 24小时在线。
传统关系型数据库在这种环境下成为了瓶颈,通常有2种解决方法:
- 升级服务器硬件:虽然提升了性能,但总有天花板。
- 数据分片,使用分布式集群结构:对单点数据库进行数据分片,存放到由廉价机器组成的分布式的集群里。
可扩展性更好了,但也带来了新的麻烦。
以前在一个库里的数据,现在跨了多个库,应用系统不能自己去多个库中操作,需要使用数据库分片中间件。
分片中间件做简单的数据操作时还好,但涉及到跨库join、跨库事务时就很头疼了,很多人干脆自己在业务层处理,复杂度较高。
# NoSQL 的优势与不足
后来 NoSQL出现了,放弃了传统SQL的强事务保证和关系模型,重点放在数据库的高可用性和可扩展性。
NoSQL 的主要优势:
- 高可用性和可扩展性,自动分区,轻松扩展
- 不保证强一致性,性能大幅提升
- 没有关系模型的限制,极其灵活
NoSQL 不保证强一致性,对于普通应用没问题,但还是有不少像金融一样的企业级应用有强一致性的需求。
而且 NoSQL 不支持 SQL 语句,兼容性是个大问题,不同的 NoSQL 数据库都有自己的 api 操作数据,比较复杂。
# NewSQL 特性
NewSQL 提供了与 NoSQL 相同的可扩展性,而且仍基于关系模型,还保留了极其成熟的 SQL 作为查询语言,保证了ACID事务特性。
简单来讲,NewSQL 就是在传统关系型数据库上集成了 NoSQL 强大的可扩展性。
传统的SQL架构设计基因中是没有分布式的,而 NewSQL 生于云时代,天生就是分布式架构。
NoSQL 的主要特性:
- SQL 支持,支持复杂查询和大数据分析。
- 支持 ACID 事务,支持隔离级别。
- 弹性伸缩,扩容缩容对于业务层完全透明。
- 高可用,自动容灾。
SQL | NoSQL | NewSQL | |
---|---|---|---|
关系模型 | Yes | No | Yes |
SQL语句 | Yes | No | Yes |
ACID | Yes | No | Yes |
水平扩展 | No | Yes | Yes |
大数据 | No | Yes | Yes |
无结构化 | No | Yes | No |
# 主流 NewSQL 项目
- VoltDB (opens new window):一个内存数据库,提供了 NoSQL 数据库的可伸缩性,和传统关系数据库系统的 ACID 一致性
- SingleStore (opens new window)(前身MemSQL):由前Facebook工程师创办,号称世界上最快的分布式关系型数据库,兼容MySQL但快30倍,能实现每秒150万次事务。原理是仅用内存并将SQL预编译为C++。
- TiDB (opens new window):是PingCAP 公司受 Google Spanner / F1 论文启发而设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性
- OceanBase (opens new window):蚂蚁集团的自研数据库产品,性能强大,高度兼容 Oracle 和 MySQL 的原生分布式数据库
- ...................
# SPL
关于SPL的介绍,这里转载下阮一峰老师的博客:科技爱好者周刊(第 273 期):任正非的三篇最新谈话 - 阮一峰的网络日志 (opens new window)
SQL 的大名,大家一定听说过,这是必备的数据库技能。但是你未必知道,它有一个最大痛点:不善于计算。只要涉及计算,SQL 语句要么不好写,要么性能差。
有一个面试问题:找出某只股票连续上涨的最长天数,SQL 应该怎么写?
上面就是答案,涉及多张中间表,不是精通 SQL 的高级工程师,根本写不出来。
SQL 不善于计算的原因很简单,它作为查询语言而发明,名字就叫"结构化查询"(structured query),数学基础是关系模型,一开始就没有考虑要做复杂计算。
近年来,数据处理和计算的需求越来越大,于是 OLAP(联机分析处理)和 OLTP(联机事务处理)这样的新技术就诞生了。它们基于数据库,属于"数据库 + 计算层",如果遇到海量数据,处理效率往往不高。
但是,还有另一种思路:能不能改造数据库底层,让它善于计算呢? 这就是 SPL 语言 (opens new window)的由来,它把 SQL 的 Q(query 查询)换成了 P(process 数据处理),数学基础从关系模型变成了离散数学,把 "数据存储 + 数据计算"做在了一起。
SPL 属于新概念,网上有一个中文论坛"乾学院" (opens new window),里面全是 SPL 相关知识,大家可以看看。
国内目前只有一家公司,在研发和推广 SPL 技术,创始人据说是来自清华大学计算机系的奥林匹克数学竞赛的金牌得主。
他们已经做出了自己的 SPL 实现,并向社会开源了,叫做 esProc SPL (opens new window),GitHub 已经有 2300+ star。这个产品有很多优点,我帮他们宣传一下,把 SPL 传播出去。
# 推荐阅读
除了 MySQL,这些数据库你都认识么? (opens new window)
Sql Or NoSql,看完这一篇你就都懂了 (opens new window)
为什么很多公司都开始去 Oracle 而使用 MySQL? - 知乎 (opens new window)
为什么传统行业几乎都用Oracle,而互联网行业几乎都不用Oracle呢? - 赛车手的回答 - 知乎 (opens new window)
为什么传统行业几乎都用Oracle,而互联网行业几乎都不用Oracle呢? - 陈龙的回答 - 知乎 (opens new window)
贺TDSQL喜提286万QPS!本文回顾了它的十年锻造之路 - 知乎 (opens new window)
云数据库,谁才是真正领导者? (opens new window)
开源 2 年、打磨 13 年的开源数据库项目,性能炸裂! (opens new window)
https://db.cs.cmu.edu/papers/2016/pavlo-newsql-sigmodrec2016.pdf (纯英文)