HBase、MongoDB、MySQL、Oracle、Redis--nosql資料庫與關係資料庫對比
類別 | HBase | MongoDB | MySQL | Oracle | Redis |
描述 | 基於 Apache Hadoop 並提供 BigTable 能力的列儲存 | 最受歡迎的文件儲存資料庫之一 | 廣泛使用的開源 RDBMS | 廣泛使用的 RDBMS | 記憶體中的資料結構儲存,被用作資料庫,快取以及訊息中介軟體 |
普及度等級(參考下文的趨勢圖) | 15 級(59.03 分) | 4 級(300.57 分) | 2 級(1277.75 分) | 1 級(1463.37 分) | 10 級(100.65 分) |
資料庫模型 | 列儲存 | 文件儲存 | 關係資料庫系統 | 關係資料庫系統 | 鍵-值儲存 |
官網 | hbase.apache.org | www.mongodb.org | www.mysql.com | www.oracle.com/-us/-products/-database | redis.io |
技術文件 | hbase.apache.org | docs.mongodb.org/-manual | dev.mysql.com/-doc | www.oracle.com/-technetwork/-indexes/-documentation/-index.html | redis.io/-documentation |
開發者 | Apache 軟體基金會 | MongoDB 公司 | Oracle | Oracle | Salvatore Sanfilippo(Redis 之父) |
首次發行 | 2008 | 2009 | 1995 | 1980 | 2009 |
當前版本 | 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) | 否 | 否 | 否 | 否 | 否 |
實現語言 | Java | C++ | 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 D Dart Delphi Erlang Go Groovy Haskell Java JavaScript Lisp Lua MatLab Perl PHP PowerShell Prolog Python R 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 |
是否支援服務端指令碼 | 是 | JavaScript | 是 | PL/SQL | Lua |
是否支援觸發器 | 是 | 否 | 是 | 是 | 否 |
切分方式 | 分片 | 分片 | 水平切分,使用 MySQL Cluster 或者 MySQL Cluster 進行分片 | 水平切分 | 分片 |
主從複製方式 | 多種主從複製機制 | 主-從複製 |
主-主複製 主-從複製 |
主-主複製 主-從複製 |
主-從複製 |
是否支援 MapReduce | 是 | 是 | 否 | 否 | 否 |
分散式場景下資料一致性方法 | 立即一致 |
最終一致 立即一致 |
立即一致 | 最終一致 | |
是否支援外來鍵 | 否 | 否 | 是 | 是 | 否 |
是否支援事務 | 否 | 否 | ACID | ACID | 樂觀鎖機制,原子性執行的命令塊和指令碼 |
是否支援併發 | 是 | 是 | 是 | 是 | 是 |
是否支援持久化儲存 | 是 | 是 | 是 | 是 | 是 |
是否支援記憶體儲存 | 否 | 是 | 是 | 是 | |
訪問控制 | 訪問控制列表(ACL) | 基於使用者和角色的訪問許可權 | 細粒度的使用者訪問許可權 | 根據 SQL 標準細粒度的訪問許可權 | 簡單的基於密碼的訪問控制 |
附錄一:普及度等級趨勢圖
附錄二:兩張圖告訴你如何在 SQL、NewSQL、NoSQL 之間進行取捨
圖一:Do I Need SQL or Hadoop?
圖二: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 Voldemort | GitHub (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、RavenDB | SAP (MongoDB)、Codecademy (MongoDB)、Foursquare (MongoDB)、NBC News (RavenDB) |
1. 日誌。企業環境下,每個應用程式都有不同的日誌資訊。Document-Oriented 資料庫並沒有固定的模式,所以我們可以使用它儲存不同的資訊。 2. 分析。鑑於它的弱模式結構,不改變模式下就可以儲存不同的度量方法及新增新的度量。 |
在不同的文件上新增事務。Document-Oriented 資料庫並不支援文件間的事務,如果對這方面有需求則不應該選用這個解決方案。 |
列儲存(Wide Column Store/Column-Family)資料庫 | 列儲存資料庫將資料儲存在列族(column family)中,一個列族儲存經常被一起查詢的相關資料。舉個例子,如果我們有一個 Person 類,我們通常會一起查詢他們的姓名和年齡而不是薪資。這種情況下,姓名和年齡就會被放入一個列族中,而薪資則在另一個列族中。 | Cassandra、HBase | Ebay (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、OrientDB | Adobe (Neo4J)、Cisco (Neo4J)、T-Mobile (Neo4J) |
1. 在一些關係性強的資料中 2. 推薦引擎。如果我們將資料以圖的形式表現,那麼將會非常有益於推薦的制定 |
不適合的資料模型。圖資料庫的適用範圍很小,因為很少有操作涉及到整個圖。 |
相關推薦
HBase、MongoDB、MySQL、Oracle、Redis--nosql資料庫與關係資料庫對比
HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis,三大主流開源 NoSQL 資料庫的 PK 兩大主流傳統 SQL 資料庫 類別 HBase MongoDB MySQL Oracle Redis 描述 基於 Ap
47、自適應mysql和oracle(2)
學習過程: 接著上一節課,下面我們設計一個工廠類,根據資料庫dao層生產的工廠。這個類根據jdbc.properties配置檔案的db屬性讀取配置檔案,然後生成不同的dao實現,新建一個FactoryDao類,程式碼如下: public class FactoryDao { priva
46、自適應mysql和oracle(1)
學習過程: 在需求分許裡面還有這麼一個要求就是能自適應mysql和oracle,雖然只有這麼一句話,但是我們應該如何才能實現這個功能,畢竟mysql和oracle資料庫所支援的sql語言除了基本的增刪改查是一樣之外,還是有很多是不同的,比如說分頁演算法就不同,那麼我們如何可以讓使用者在不修改ja
redis 、mongodb還有mysql的比較
MongoDB 是一個基於分散式檔案儲存的資料庫。由 C++ 語言編寫。旨在為 WEB 應用提供可擴充套件的高效能資料儲存解決方案。 MongoDB 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的 Redis 是完全
代寫CO4215/CO7215/CO7515作業、代做C#程式設計設計作業、代寫MySQL留學生作業、代做C#語言作業
代寫CO4215/CO7215/CO7515作業、代做C#程式設計設計作業、代寫MySQL留學生作業、代做C#語言作業Advanced Web TechnologiesCO4215/CO7215/CO7515Assignment 1University of Leicester 1 of 2Departmen
Windows訊息佇列、執行緒訊息佇列,視窗訊息的概念與關係
1.視窗 Windows程式是由一系列的視窗構成的,每個視窗都有自己的視窗過程,視窗過程就是一個擁有有固定 Signature 的 C函式,具體格式如下: LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wPa
ORACLE資料生成awr報告與檢視資料庫連線數
一,生成awr報告 查詢awrrpt.sql檔案位置 1 find / -name awrrpt.sql 2,進入oracle目錄 3登入oracle sqlplus / as sysdba 4, SQL>@/home/oracle/app/oracle/produc
Hbase資料庫與傳統資料庫的比較
HBase的知識點 Mycat備份機制 HMASTER動態感知HregionServer的狀態。 基於行的行式資料庫 行式讀取方式 基於列的列式資料庫 傳統資料庫的
25.logstash一次同步Mysql多張表到ES(ES與關係型資料庫同步)
題記一次同步多張表是開發中的一般需求。之前研究了很久找到方法,但沒有詳細總結。 博友前天線上提問,說明這塊理解的還不夠透徹。 我整理下, 一是為了儘快解決博友問題, 二是加深記憶,便於未來產品開發中快速上手。1、同步原理原有ES專欄中有詳解,不再贅述。詳細請參考我的專欄: 深
HBase資料庫與關係型資料庫的區別(取材於官方文件)
HBase 資料被建模為多維對映,其中值(表單元)通過 4 個鍵索引: value = Map(TableName, RowKey, ColumnKey, Timestamp) 其中: TableName 是一個字串。 是表名。 RowKey 和 ColumnKey 是
Navicat for Premium破解通用MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 資料庫
Navicat for Premium破解通用MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 資料庫 Navicat for MariaDB為例 Navicat Premium 是一套資料庫開發工具,讓你從單一應用程
《物聯網框架ServerSuperIO教程》-19.設備驅動和OPC Client支持mysql、oracle、sqlite、sqlserver的持久化。v3.6.4版本發布
sql 數據庫名 http oracle mongod 文件 https bapi 開發 19.設備驅動和OPC Client支持mysql、oracle、sqlite、sqlserver的持久化 19.1 概述 ServerSuperIO支持設備驅動
三種數據庫日期轉字符串對照sql server、oracle、mysql(V4.11)
to_date 擴展 article zha ret lar span timestamp tracking 三種數據庫日期轉換對照: http://blog.csdn.net/zljjava/article/details/17552741 SQL類
對比Cassandra、 Mongodb、CouchDB、Redis、Riak、 Membase、Neo4j、HBase
知識 gre 日誌功能 cor phar 大小 pla ebo 在操作 轉自:http://www.cnblogs.com/alephsoul-alephsoul/archive/2013/04/26/3044630.html 導讀:Kristóf Kov&
pmm 監控mysql、mongodb、系統
eth 運行 centos enter 架構 graph 問題: god passwords Pmm監控 1、概述 Pmm是(percona management and monitoring)一款用於數據庫(mysql、mongodb)的監控工具,是一種典型的C/S架構。
mysql表名等大小寫敏感問題、字段類型timestamp、批量修改表名、oracle查詢歷史操作記錄等
table 時間 lar 內容 sele values 當前日期 load 兩個 mysql表名等大小寫敏感問題:http://blog.csdn.net/postnull/article/details/72455768; 1 MySQL在Linux下數據庫名、表名、
bitlocker加密了磁盤, windows10版本升級後,裝在加密盤的oracle、mysql啟動不來
bitlocker、加密、升級、oracle、mysql啟動不了原因是windows10版本系統升級後,把oracle和mysql的服務改了。我的情況:由於D盤使用bitlocker加密了,重啟後不輸入密碼不可訪問,本來oracle是安裝在D盤,結果升級完後,oracle服務中的路徑信息全部被修改到C盤了,導
3類數據庫的聯動:mysql、mongodb、redis
__main__ redis ctr inpu close brush init all cep 3類數據庫的聯動:mysql、mongodb、redis from pymysql import * from pymongo import * from redis imp
MyBatis之Oracle、Mysql批量插入
sel index key myba arc ava pub rac oracl Mybatis中Dao層 public interface UsersMapper { public void insertEntitys(List<UserEntity>
mysql、redis、MongoDB的區別
NoSQL 的全稱是 Not Only SQL,也可以理解非關係型的資料庫,是一種新型的革命式的資料庫設計方式,不過它不是為了取代傳統的關係型資料庫而被設計的,它們分別代表了不同的資料庫設計思路。 MongoDB:它是一個記憶體資料庫,資料都是放在記憶體裡面的。