关系数据库,非关系数据库,云原生数据库
一 概述
最近在研究学习数据库知识,发现市面上太多数据库及其书籍,而且体系混乱,越看越糊涂,故特意了解了数据库的发展史。
最早提出关系型数据库原理的是E.F.Codd,他在其论文A Relational Model of Data for Large Shared Data Banks中详述了关系数据库的原理和实现,我看了下论文,和今天的数据库简直一模一样。
而非关系数据库NoSQL一词首先是Carlo Strozzi在1998年提出来的,指的是他开发的一个没有SQL功能,轻量级的,开源的关系型数据库。这个定义跟我们现在对NoSQL的定义有很大的区别,它本来指的就是“没有SQL”的数据库,但是NoSQL的发展慢慢偏离了初衷,我们要的不是“no sql”,而是“no relational”,也就是我们现在常说的非关系型数据库。
2009年初,Johan Oskarsson举办了一场关于开源分布式数据库的讨论,Eric Evans在这次讨论中再次提出了NoSQL一词,用于指代那些非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。Eric Evans使用NoSQL这个词,并不是因为字面上的“没有SQL”的意思,他只是觉得很多经典的关系型数据库名字都叫“xxxSQL”,所以为了表示跟这些关系型数据库在定位上的截然不同,就是用了“NoSQL“一词。
随着社会的发展,不同时代对数据处理和存储的需求在不断变化,故而可以预见的是,数据库会不断有新品种诞生,老品种过时退出市场。今天历史偶然地走上了大数据和智能的时代,所以未来数据一定是很重要的一块,而数据库由于其特殊地位,应当得到极大的发展。我预计,未来10-20年应该会诞生数种新的广泛流行使用的数据库,满足的需求应当是切合时代要求的。中国的数据库厂商应该要有眼光锁定未来市场。为什么? 因为我们有最多的人口,倘使10年后每个中国人都要接入网络,每天产生1G的数据,那么一年,14甚至15亿人口是什么概念?古代有县志,史书。而现代人也当考虑如何将我们丰富的生活和文化保留给后人研究,所以大型的数据库必然会出现,建立人类数据库势在必行,可能下一个创业点也在此。
在我的认识里,数据库除了存储还要满足对关系的映射,这里关系包含传统的关系数据库关系,也包含非关系数据库的关系。嗯?非关系数据库还有关系?是的,没有消息就是消息,没有关系也是关系。数据总是有结构存在的,目前的成熟产品不一定能应对未来的场景,此间到底还有多少可以挖掘的知识就需要一代代人慢慢摸索。
若干年来,数据库一直锁定在大厂商手里,下面略谈一些。
二 数据库大厂
做数据库的大厂商目前有七家(排名不分先后)。
SAP,企业资源计划系统里的佼佼者。
AWS,Amazon巨头,卖东西卖出大机遇。
IBM,百年老牌,现代计算机结构的奠基者。
Google,不作恶,偏学好,引领时代精神。
Oracle,甲骨文,专注于闭源的杰出代表。
Aliyun,阿里巴巴,人人夸。
MicroSoft,Windows发扬者。
二 关系型数据库
常见的关系数据库如下:
DB2 是IBM一种分布式数据库解决方案,是IBM开发的一种大型关系型数据库平台。
支持多用户或程序在同一条SQL 语句中查询不同database甚至DBMS中的数据。
Oracle 是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。
可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统。
MySQL 是一种开放源代码的关系型数据库管理系统,使用最常用的数据库管理语言
结构化查询语言(SQL)进行数据库管理。
MariaDB 是MySQL的一个分支,主要由开源社区在维护,由MySQL创始人开发。MariaDB完全兼容
MySQL,使之能轻松成为MySQL的代替品。使用XtraDB来代替MySQL的InnoDB。
SQLite 是一款轻型的数据库,遵守ACID的关系型数据库管理系统,包含在一个相对小的C库中。
设计目标是嵌入式,它占用资源非常的低,在嵌入式设备中,可能只需几百K内存就够了。
Access 是由微软发布的关系数据库管理系统。它结合了MicrosoftJet Database Engine和图形
用户界面两项特点,是Microsoft Office的系统程序之一。
PostgreSQL 是以加州大学伯克利分校计算机系开发的POSTGRES(现已更名为PostgreSQL)为基础的
对象关系型数据库管理系统(ORDBMS)。
SQL Server 同样是微软公司推出的一种关系型数据库系统。是一个可扩展的、高性能的、为分布式
客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了
基于事务的企业级信息管理系统方案。
Teradata 整体上是按Shared Nothing 架构体系进行组织的,他的定位就是大型数据仓库系统,定位比较高。
Ingres 是比较早的数据库系统,开始于加利福尼亚大学柏克莱分校的一个研究项目,该项目
开始于70年代早期,在80年代早期结束。从80年代中期,在Ingres基础上产生了很多
商业数据库软件,包括Sybase、MicrosoftSQL Server、NonStop SQL、Informix 。
Informix 是IBM公司出品的关系数据库管理系统(RDBMS)家族。作为一个集成解决方案,
它被定位为作为IBM在线事务处理(OLTP)旗舰级数据服务系统。
Sybase 美国Sybase公司研制的一种关系型数据库系统,是一种典型的UNIX或WindowsNT平台上
客户机/服务器环境下的大型数据库系统。
FoxPro 是一种功能强大的数据库,是当今最受欢迎的数据库管理软件之一。FoxPro数据库最初
由美国Fox公司1988年推出,1992年Fox公司被Microsoft公司收购。
Percona 为MySQL数据库服务器进行了改进,在功能和性能上较MySQL有着很显著的提升。该版本
提升了在高负载情况下的InnoDB的性能,为DBA提供一些非常有用的性能诊断工具。
Cache 是美国Intersystems公司产品,后关系型数据库(Post Relational database)中的领头羊。
Cache数据库在国外特别是医疗领域,在美国和欧洲的HIS系统(医疗卫生管理信息系统)中,所占的比例最大,医疗界首选。
三 非关系型数据库
非关系型里有key-value型的,也有做搜索的,还有做文档和图形和扩展式的。
常见的非关系数据库如下:
Redis 一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Riak Riak是一个分布式的存储文档型数据库。
HBase 一个分布式的、面向列的开源数据库,源于Fay Chang的Google论文“Bigtable:一个结构化数据的分布式存储系统”。
HBase是Apache的Hadoop项目的子项目。
Flare 由日本第二大SNS网站green.jp开发,支持scale,可动态添加或删除数据库服务节点。
MongoDB 一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
Couchbase CouchDB和Membase合并后的产品,先进的Cache系统,由C/C++开发。
Memcached 一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发。
Neo4j 一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于
磁盘的、具备完全的事务特性的Java持久化引擎。
DynamoDB 被设计成用来托管的NoSQL数据库服务、可预期的性能、可实现无缝扩展性和可靠性等核心问题。
Hazelcast 一个开源的可嵌入式数据网格,可以把它看做是内存数据库,但与Redis有不同。
Accumulo 一个基于Google’s BigTable的高扩展性存储数据库。采用java编写并且操作于HDFS系统上.
Cassandra 一套开源分布式NoSQL数据库系统。最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable
的数据模型与Amazon Dynamo的完全分布式的架构于一身。
Cloundant 省却维护人员在数据库管理、维护和调优方面的工作,而不需要考虑数据库管理以及后续随着数据量增长带来的扩展性问题。
麻省理工的三位物理学家在寻找上帝粒子的科学实验中将CouchDB进行了大量定制和改进,从而形成了Cloudant。
DataStax 基于开源的“NoSQL”数据库Apache Cassandra,将Cassandra与Hadoop进行了集成。
FlockDB 一个存储图数据的分布式数据库,图数据库的存储对象是图论里面的图,而非图片。Twitter使用它来存储
人与人之间的关系图。
MarkLogic 企业级的NoSQL数据库。是一个集存储、管理、搜索JSON和XML文档和图形数据的multi-model NoSWL数据库。
Voldemort 一个分布式键-值(Key-value)存储系统,是Amazon Dynamo的一个开源克隆。
Twemproxy 引入代理层,可将后端的多台Redis或Memcached实例进行统一管理与分配,使应用程序只需要在Twemproxy上进行操作,
而不用关心后面具体有多少个真实的 Redis 或 Memcached 存储。
CockroachDB 一款开源的分布式数据库,具有NoSQL对海量数据的存储管理能力,又保持了传统数据库支持的ACID和SQL等,
还支持跨地域、去中心、高并发、多副本强一致和高可用等特性。
Elasticsearch 一个接近实时的搜索平台,从索引这个文档到这个文档能够被搜索到只有一个轻微的延迟。
Azure Cosmos DB 由Microsoft提供的全球分布式多模型数据库。
新技术
还有一些新技术实现的数据库,应对目的不同。
TiDB,LMDB,NuoDB,VoltDB,TokuDB,MemSQL,Spanner,LevelDB,Clustrix,dbShards,Scalearc,
LSM-Tree,ScaleBase ,SequoiaDB,Tokyo Cabinet(TC),Tokoy Tyrant(TT)
四 云源生数据库
云时代诞生的新型数据库,目前还处在发展阶段。
Aurora 亚马逊推出的云原生数据库。
PolarDB 阿里产品。
CynosDB 腾讯产品。
五 结语
数据库种类实在太多,在此只列举了一部分,当然,大部分人能用得到的就一部分。
看到这些数据库,感觉自己知识实在匮乏,对很多东西理解太简单,对新技术的领悟太浅显。
希望能在数据这块好好研究,毕竟未来可期。
六 参考资源
[1] 数据库排名
[2] 什么是“云原生”数据
[3] 阿里云数据库入选Gartner