跳转到内容

NoSQL

本页使用了标题或全文手工转换
维基百科,自由的百科全书

这是本页的一个历史版本,由Starduster.me留言 | 贡献2016年5月10日 (二) 23:13 (消歧义)编辑。这可能和当前版本存在着巨大的差异。

NoSQL是對不同於傳統的關聯式資料庫数据库管理系统的統稱。(注依据Martin Fowler,NoSQL 不是英文Not Only SQL, 因为这会是NOSQL 而不是NoSQL)

兩者存在許多顯著的不同點,其中最重要的是NoSQL不使用SQL作為查詢語言。其數據存儲可以不需要固定的表格模式,也經常會避免使用SQL的JOIN操作,一般有水平可扩展性的特征。NoSQL的实现具有二个特征:使用硬碟,或者把随机存储器作存储载体。

发展历史

NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库[1]

2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论[2],来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。

2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;"。因此,对NoSQL最普遍的解释是“非关聯型的”,强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。

特点

当代典型的關聯式資料庫在一些数据敏感的应用中表现了糟糕的性能,例如为巨量文档建立索引、高流量网站的网页服务,以及发送流式媒体[3]关系型数据库的典型实现主要被调整用于执行规模小而读写频繁,或者大批量极少写访问的事务。

NoSQL的結構通常提供弱一致性的保證,如最終一致性,或交易僅限於單個的數據項。不過,有些系統,提供完整的ACID保證在某些情況​​下,增加了補充中間件層(例如,CloudTPS)[4]。有兩個成熟的系統有提供快照隔離的列存儲:像是Google基於過濾器系統的BigTable[5],和滑鐵盧大學开发的HBase[6]。這些系統,自主開發,使用類似的概念來實現多行(multi-row)分散式ACID交易的快照隔離(snapshot isolation)保證為基礎列儲存,無需額外的資料管理開銷,中間件系統部署或維護,減少了中間件層。

少数NoSQL系统部署了分布式结构,通常使用分散式雜湊表(DHT)将数据以冗余方式保存在多台服务器上。依此,扩充系统时候添加服务器更容易,并且扩大了对服务器失效的承受能程度。[7]

分类

文档存储

名稱 語言 注解
BaseX XQuery, Java XML database
CouchDB Erlang
eXist XQuery XML database
iBoxDB Java CSharp
Jackrabbit Java
Lotus Notes LotusScript, Java, others MultiValue
MarkLogic Server XQuery XML database
MongoDB C++ JSON database
OrientDB Java
SimpleDB Erlang
Terrastore Java
ElasticSearch Java
No2DB C# JSON database

图形关系存储

名稱 語言 注解
AllegroGraph SPARQL RDF GraphStore
DEX Java , C# High-performance Graph Database
Neo4j Java
FlockDB Scala

鍵-值(key‐value)儲存

最終一致性的鍵-值儲存

架構性鍵-值储存

主機式服務

Key/value硬盘存储

Memcachedb可以结合关系数据库一起提供。这需要对数据库的设计进行优化

Key/value RAM存储

Key-value基于Paxos算法的存储

多数据库

对象数据库

参考文献

  1. ^ Lith, Adam; Jakob Mattson. Investigating storage solutions for large data: A comparison of well performing and scalable data storage solutions for real time extraction and batch insertion of data (PDF). Göteborg: Department of Computer Science and Engineering, Chalmers University of Technology: 15, 70. 2010 [2011-05-12]. Carlo Strozzi first used the term NoSQL in 1998 as a name for his open source relational database that did not offer a SQL interface[...] 
  2. ^ NOSQL 2009. Blog.sym-link.com. 2009-05-12 [2010-03-29]. 
  3. ^ Agrawal, Rakesh; et al. The Claremont report on database research (PDF). SIGMOD Record (計算機協會). 2008, 37 (3): 9–19. ISSN 0163-5808. doi:10.1145/1462571.1462573. 
  4. ^ CloudTPS: Scalable Transactions for Web Applications in the Cloud. Globule.org. [2010-03-29]. 
  5. ^ Large-scale Incremental Processing Using Distributed Transactions and Notifications (PDF). The 9th USENIX Symposium on Operating Systems Design and Implementation (OSDI 2010), Oct 4–6, 2010, Vancouver, BC, Canada. [2010-10-15]. 
  6. ^ Supporting Multi-row Distributed Transactions with Global Snapshot Isolation Using Bare-bones [[HBase]] (PDF). The 11th ACM/IEEE International Conference on Grid Computing (Grid 2010), Oct 25-29, 2010, Brussels, Belgium. [2010-10-15].  网址-维基内链冲突 (帮助)
  7. ^ Cassandra: Structured Storage System over a P2P Network (PDF). [2010-03-29]. 
  8. ^ Riak: An Open Source Scalable Data Store. 28 November 2010 [28 November 2010]. 
  9. ^ http://nosql.mypopescu.com/post/5633789299/intersystems-globals-and-gt-m-compared

外部链接

参见