我越读关于NoSQL的资料,就越觉得它听起来像是一种列式数据库。
NoSQL(例如CouchDB、Cassandra、MongoDB)和列式数据库(例如Vertica、MonetDB)有什么区别呢?
我越读关于NoSQL的资料,就越觉得它听起来像是一种列式数据库。
NoSQL(例如CouchDB、Cassandra、MongoDB)和列式数据库(例如Vertica、MonetDB)有什么区别呢?
NoSQL 是一个术语,用于表示不仅仅是 SQL,它涵盖了四个主要类别 - 键值、文档、列族和图形数据库。
键值 数据库非常适合具有频繁小读写和简单数据模型的应用程序。这些记录使用唯一标识记录的键来存储和检索,并用于快速在数据库中查找数据。
例如 Redis、Riak 等。
文档数据库 具有存储各种属性以及大量数据的能力。
例如 MongoDB、CouchDB 等。
列族 数据库专为大量数据、读写性能和高可用性而设计。
例如 Cassandra、HBase 等。
图形 数据库是一种使用图形结构进行语义查询的数据库,其中节点、边缘和属性用于表示和存储数据。
例如 Neo4j、InfiniteGraph 等。
在理解 NoSQL 之前,您必须了解一些关键概念。
一致性 - 系统中的所有服务器将具有相同的数据。
可用性 - 系统将始终响应请求(数据可能过时或过期。但最终将进行更正)。
分区容错性 - 即使单个服务器失败或无法访问,系统仍将作为一个整体运行。
大多数情况下,NoSQL数据库只能满足上述三个属性中的两个。
从您的问题中可以得知:
CouchDB: AP(可用性和分区)& 文档数据库
Cassandra: AP(可用性和分区)& 列族数据库
MongoDB: CP(一致性和分区)& 文档数据库
Vertica: CA(一致性和可用性)& 列族数据库
MonetDB: ACID(原子性、一致性、隔离性、耐久性) & 关系型数据库
一些NoSQL数据库是列式数据库,而有些SQL数据库也是列式的。无论数据库是行还是列导向,都属于数据库的物理存储实现细节,可以适用于关系型和非关系型(NoSQL)数据库。
例如,Vertica是一个列式关系数据库,因此它实际上不符合NoSQL数据存储的标准。
“NoSQL运动”数据存储最好定义为非关系型、共享无内容、水平可扩展的数据库,不一定具有ACID保证。一些列式数据库可以被描述为这种类型。除了列存储外,NoSQL实现还包括文档存储、对象存储、元组存储和图形存储。
{
_id : ObjectId("4e77bb3b8a3e000000004f7a"),
when : Date("2011-09-19T02:10:11.3Z"),
author : "alex",
title : "No Free Lunch",
text : "This is the text of the post. It could be very long.",
tags : [ "business", "ramblings" ],
votes : 5,
voters : [ "jane", "joe", "spencer", "phyllis", "li" ],
comments : [
{ who : "jane", when : Date("2011-09-19T04:00:10.112Z"),
comment : "I agree." },
{ who : "meghan", when : Date("2011-09-20T14:36:06.958Z"),
comment : "You must be joking. etc etc ..." }
]
}