HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis

http://www.thebigdata.cn/HBase/15222.html

HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis,三大主流开源 NoSQL 数据库的 PK 两大主流传…

[日期:2015-09-16]来源:CSDN博客  作者:[字体:  ]
HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis,三大主流开源 NoSQL 数据库的 PK 两大主流传统 SQL 数据库

类别HBaseMongoDBMySQLOracleRedis
描述基于 Apache Hadoop 并提供 BigTable 能力的列存储最受欢迎的文档存储数据库之一广泛使用的开源 RDBMS广泛使用的 RDBMS内存中的数据结构存储,被用作数据库,缓存以及消息中间件
普及度等级(参考下文的趋势图)15 级(59.03 分)4 级(300.57 分)2 级(1277.75 分)1 级(1463.37 分)10 级(100.65 分)
数据库模型列存储文档存储关系数据库系统关系数据库系统键-值存储
官网hbase.apache.orgwww.mongodb.orgwww.mysql.comwww.oracle.com/-us/-products/-databaseredis.io
技术文档hbase.apache.orgdocs.mongodb.org/-manualdev.mysql.com/-docwww.oracle.com/-technetwork/-indexes/-documentation/-index.htmlredis.io/-documentation
开发者Apache 软件基金会MongoDB 公司OracleOracleSalvatore Sanfilippo(Redis 之父)
首次发行20082009199519802009
当前版本1.1.0.1,2015 年 5 月3.0.5,2015 年 7 月5.6.26,2015 年 7 月12 Release 1 (12.1.0.2),2014 年 7 月3.0.3,2015 年 6 月
许可开源开源开源商业开源
是否数据库即服务(DBaaS)
实现语言JavaC++C 和 C++C 和 C++C
服务器操作系统Linux 
Unix 
Windows
Linux 
OS X 
Solaris 
Windows
FreeBSD 
Linux 
OS X 
Solaris 
Windows
AIX 
HP-UX 
Linux 
OS X 
Solaris 
Windows 
z/OS
BSD 
Linux 
OS X 
Windows
是否结构化数据自由自由自由
是否预定义数据类型部分
是否支持 XML
是否支持二级索引
是否支持 SQL
API 以及其他访问方式Java API 
RESTful HTTP API
Thrift
使用 JSON 的专用协议ADO.NET 
JDBC 
ODBC
ODP.NET 
Oracle Call Interface (OCI) 
JDBC 
ODBC
专用协议
支持的编程语言
C# 
C++ 
Groovy 
Java 
PHP 
Python 
Scala
Actionscript 

C# 
C++ 
Clojure  
ColdFusion  
D  
Dart  
Delphi  
Erlang 
Go  
Groovy  
Haskell 
Java 
JavaScript
Lisp  
Lua  
MatLab  
Perl 
PHP 
PowerShell  
Prolog  
Python 
R  
Ruby 
Scala 
Smalltalk
Ada 

C# 
C++ 

Eiffel 
Erlang 
Haskell 
Java 
Objective-C 
OCaml 
Perl 
PHP 
Python 
Ruby 
Scheme 
Tcl

C# 
C++ 
Clojure 
Cobol 
Eiffel 
Erlang 
Fortran 
Groovy 
Haskell 
Java 
JavaScript 
Lisp 
Objective C 
OCaml 
Perl 
PHP 
Python 

Ruby 
Scala 
Tcl 
Visual Basic

C# 
C++ 
Clojure 
Crystal 

Dart 
Elixir 
Erlang 
Fancy 
Go 
Haskell 
Haxe 
Java 
JavaScript (Node.js) 
Lisp 
Lua 
MatLab 
Objective-C 
OCaml  
Perl 
PHP 
Prolog 
Pure Data 
Python 

Rebol 
Ruby 
Rust 
Scala 
Scheme 
Smalltalk 
Tcl
是否支持服务端脚本JavaScriptPL/SQLLua
是否支持触发器
切分方式分片分片水平切分,使用 MySQL Cluster 或者 MySQL Cluster 进行分片水平切分分片
主从复制方式多种主从复制机制主-从复制主-主复制主-从复制主-主复制主-从复制主-从复制
是否支持 MapReduce
分布式场景下数据一致性方法立即一致最终一致立即一致
立即一致最终一致
是否支持外键
是否支持事务ACIDACID乐观锁机制,原子性执行的命令块和脚本
是否支持并发
是否支持持久化存储
是否支持内存存储
访问控制访问控制列表(ACL)基于用户和角色的访问权限细粒度的用户访问权限根据 SQL 标准细粒度的访问权限简单的基于密码的访问控制

附录一:普及度等级趋势图

附录二:两张图告诉你如何在 SQL、NewSQL、NoSQL 之间进行取舍

图一:Do I Need SQL or Hadoop?   

图二:SQL vs. NewSQL vs. NoSQL

附录三:Redis 之父 Salvatore Sanfilippo 访谈节选

附录四:NoSQL 数据库的类型一览表

NoSQL 数据库的类型一览表

键值(Key-Value)数据库键值数据库就像在传统语言中使用的哈希表。你可以通过key来添加、查询或者删除数据,鉴于使用主键访问,所以会获得不错的性能及扩展性。Riak、Redis、Memcached、Amazon’s Dynamo、Project VoldemortGitHub (Riak)、BestBuy (Riak)、Twitter (Redis和Memcached)、StackOverFlow (Redis)、 Instagram (Redis)、Youtube (Memcached)、Wikipedia(Memcached)储存用户信息,比如会话、配置文件、参数、购物车等等。这些信息一般都和ID(键)挂钩,这种情景下键值数据库是个很好的选择。1. 取代通过键查询,而是通过值来查询。Key-Value数据库中根本没有通过值查询的途径。 
2. 需要储存数据之间的关系。在Key-Value数据库中不能通过两个或以上的键来关联数据。 
3. 事务的支持。在Key-Value数据库中故障产生时不可以进行回滚。
面向文档(Document-Oriented)数据库面向文档数据库会将数据以文档的形式储存。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储。MongoDB、CouchDB、RavenDBSAP (MongoDB)、Codecademy (MongoDB)、Foursquare (MongoDB)、NBC News (RavenDB)1. 日志。企业环境下,每个应用程序都有不同的日志信息。Document-Oriented数据库并没有固定的模式,所以我们可以使用它储存不同的信息。2. 分析。鉴于它的弱模式结构,不改变模式下就可以储存不同的度量方法及添加新的度量。在不同的文档上添加事务。Document-Oriented数据库并不支持文档间的事务,如果对这方面有需求则不应该选用这个解决方案。
列存储(Wide Column Store/Column-Family)数据库列存储数据库将数据储存在列族(column family)中,一个列族存储经常被一起查询的相关数据。举个例子,如果我们有一个Person类,我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。Cassandra、HBaseEbay (Cassandra)、Instagram (Cassandra)、NASA (Cassandra)、Twitter (Cassandra and HBase)、Facebook (HBase)、Yahoo!(HBase)1. 日志。因为我们可以将数据储存在不同的列中,每个应用程序可以将信息写入自己的列族中。2. 博客平台。我们储存每个信息到不同的列族中。举个例子,标签可以储存在一个,类别可以在一个,而文章则在另一个。1. 如果我们需要ACID事务。Vassandra就不支持事务。2. 原型设计。如果我们分析Cassandra的数据结构,我们就会发现结构是基于我们期望的数据查询方式而定。在模型设计之初,我们根本不可能去预测它的查询方式,而一旦查询方式改变,我们就必须重新设计列族。
图(Graph-Oriented)数据库图数据库允许我们将数据以图的方式储存。实体会被作为顶点,而实体之间的关系则会被作为边。比如我们有三个实体,Steve Jobs、Apple和Next,则会有两个“Founded by”的边将Apple和Next连接到Steve Jobs。Neo4J、Infinite Graph、OrientDBAdobe (Neo4J)、Cisco (Neo4J)、T-Mobile (Neo4J)1. 在一些关系性强的数据中2. 推荐引擎。如果我们将数据以图的形式表现,那么将会非常有益于推荐的制定不适合的数据模型。图数据库的适用范围很小,因为很少有操作涉及到整个图。
数据库类型描述主流产品有谁在用适用场景不适用场景
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

简体中文 ZH-CN English EN Français FR 日本語 JA