三大主流开源 NoSQL 数据库和两大主流传统 SQL 数据库对比

2024-06-21 23:38

本文主要是介绍三大主流开源 NoSQL 数据库和两大主流传统 SQL 数据库对比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis,对比
类别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#
C++
Groovy
Java
PHP
Python
Scala
Actionscript 
C
C#
C++
Clojure 
ColdFusion 

Dart 
Delphi 
Erlang
Go 
Groovy 
Haskell
Java
JavaScript
Lisp 
Lua 
MatLab 
Perl
PHP
PowerShell 
Prolog 
Python

Ruby
Scala
Smalltalk
Ada
C
C#
C++
D
Eiffel
Erlang
Haskell
Java
Objective-C
OCaml
Perl
PHP
Python
Ruby
Scheme
Tcl
C
C#
C++
Clojure
Cobol
Eiffel
Erlang
Fortran
Groovy
Haskell
Java
JavaScript
Lisp
Objective C
OCaml
Perl
PHP
Python
R
Ruby
Scala
Tcl
Visual Basic
C
C#
C++
Clojure
Crystal
D
Dart
Elixir
Erlang
Fancy
Go
Haskell
Haxe
Java
JavaScript (Node.js)
Lisp
Lua
MatLab
Objective-C
OCaml 
Perl
PHP
Prolog
Pure Data
Python
R
Rebol
Ruby
Rust
Scala
Scheme
Smalltalk
Tcl
是否支持服务端脚本JavaScriptPL/SQLLua
是否支持触发器
切分方式分片分片水平切分,使用 MySQL Cluster 或者 MySQL Cluster 进行分片水平切分分片
主从复制方式多种主从复制机制主-从复制主-主复制
主-从复制
主-主复制
主-从复制
主-从复制
是否支持 MapReduce
分布式场景下数据一致性方法立即一致最终一致
立即一致
 立即一致最终一致
是否支持外键
是否支持事务ACIDACID乐观锁机制,原子性执行的命令块和脚本
是否支持并发
是否支持持久化存储
是否支持内存存储 
访问控制访问控制列表(ACL)基于用户和角色的访问权限细粒度的用户访问权限根据 SQL 标准细粒度的访问权限简单的基于密码的访问控制

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

DB-Engines Ranking - Trend of HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis Popularity.png

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

图一:Do I Need SQL or Hadoop?

图一:Do I Need SQL or Hadoop?


图二:SQL vs. NewSQL vs. NoSQL

图二:SQL vs. NewSQL vs. NoSQL


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

  • Redis 是一个开源的、高级键值数据库和数据结构服务程序,其中键可以保存字符串、散列、列表、集合和有序集合。
  • Redis 的内核是用标准 ANSI C 写成的,基于一种事件模型。
  • 非阻塞复制是 Redis 的设计目标。
  • Redis 中的复制是异步的。
  • 目前已经为许多语言(包括大部分常用语言)提供了 Redis 库。
  • C client 是唯一官方支持的包装。
  • Redis Pub/Sub 对实时应用非常适合。
  • Redis 用户有的将它用作数据库,有的用作消息总线,也有的用来做 cache

附录四: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. 推荐引擎。如果我们将数据以图的形式表现,那么将会非常有益于推荐的制定
不适合的数据模型。图数据库的适用范围很小,因为很少有操作涉及到整个图。

这篇关于三大主流开源 NoSQL 数据库和两大主流传统 SQL 数据库对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1082666

相关文章

SQL注入漏洞扫描之sqlmap详解

《SQL注入漏洞扫描之sqlmap详解》SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入... 目录what支持类型how---less-1为例1.检测网站是否存在sql注入漏洞的注入点2.列举可用数据库3.列举数据库

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Mysql DATETIME 毫秒坑的解决

《MysqlDATETIME毫秒坑的解决》本文主要介绍了MysqlDATETIME毫秒坑的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 今天写代码突发一个诡异的 bug,代码逻辑大概如下。1. 新增退款单记录boolean save = s