RDBMS构建的先决条件是,数据的属性可以预先定义好,它们之间的相互关系非常固定而且被系统的引用。

面向列的有序存储

与RDBMS面向行的存储不同,Google Bigtable数据支持面向列的存储,如果列值不存在,就不会存储,避免因为null造成的浪费。

每个数据单元看做一组键值对集合,单元通过主标识符标识,主标识符又称为主键,或者称为行健(row-key)

假设存储联系人的信息,包括:名字、姓名、职业等

first_name: John
last_name: Doe
zip_code: 10001
gender: male

另一组数据

first_name: Jane
zip_code: 94303

第1条数据的行健为1,第2条的行健为2.

在类Bigtable的面向列存储中,数据按列族(column-family)存储。

如上面的first_namelast_name是列族name的成员。

列族通常需要在配置或启动时定义好,而列则不需要预先定义或声明。

HBase

而HBase是以Google Bigtable为蓝本创建的开源的有序列族存储,其中的数据可以通过MapReduce处理。

HBase由Java实现,存在Thrift、Avro、REST和protobuf客户端。

Hypertable

Hypertable是由C++实现,使用Google RE2正则表达式类库,承诺性能高于HBase。

它支持Thrift,HQL是一种用于查询Hypertable的类SQL抽象。

键/值存储

哈希表(HashMap)或关联数组(associative array)是可以容纳键/值对的最简数据结构。

Oracle的Berkeley DB键/值存储是纯粹的存储引擎,键和值都是字节数组。

另一种常用的键/值存储是缓存,它提供应用中使用最多的数据的内存快照。

EHCache

开源的分布式缓存系统广泛应用于各类Java应用,可以将其看做NoSQL方案。

Memcached

在Web应用中非常流行,是开源的高性能对象缓存系统。

Membase

Membase基于Memcached,支持Memcached的文本和二进制协议,并在其之上增加新特性,包括磁盘持久化、数据复制、在线集群重新配置和数据动态平衡等。

Membase通过Erlang、C、C++实现。

Redis

Redis主要由C实现,支持众多语言,包括Java、Python、Ruby、C、C++等。

Cassandra

Facebook开发,通过Java实现,支持众多语言,支持Hadoop集成。

文档数据库

文档数据库不同于文档管理系统。文档通常是指松散结构的键/值对集合,通常是JSON。最为出名的是MongoDB和CouchDB。

图形数据库

Neo4j是兼容ACID的图形数据库,便于快速遍历图形。

results matching ""

    No results matching ""