NoSQL存储

 NoSQL不仅仅是No SQL,还是Not only SQL,SQL代表传统关系数据库,NoSQL显然是针对传统关系数据库的补充和升级。

NoSQL分类:

(1)Key-value stores键值存储, 保存keys+BLOBs (二进制大对象Binary Large OBjects)
(2)Table-oriented 面向表列, 主要有Google的BigTable和Cassandra.
(3)Document-oriented面向文档, 文本是一种类似XML文档,MongoDB 和 CouchDB
(4)Graph-oriented 面向图论. 如Neo4J

  面向文档与面向表列或键值存储的区别:面向列族或键值存储需要定义数据结构(半结构化),面向文档无需结构(非结构化)。

  NoSQL与关系数据库的区别:NoSQL绝对不支持Join。noSQL其实否定了关系数据库的第二索引和join。joins导致数据库切分sharding无法实施。见CAP定理。

Nosql Cap

  NoSQL具体产品种类有:
Google: Bigtable Amazon: Dynamo Amazon: SimpleDB Yahoo: HBase Microsoft: Dynomite Facebook: Cassandra LinkedIn: Voldemort

  NoSQL内部模式

  1. Distributed Hash Tables (DHT)分布式哈希
  2. Scalable 可伸缩
  3. Partitioned 分区
  4. Fault-tolerant 容错
  5. Decentralized 非集中式
  6. Peer to peer 点对点
  7. Popularized
  8. Node ring 节点环
  9. Consistent Hashing 一致性哈希

几个主要NoSQL特点介绍:

Redis
  关键点:超快Blazing fast ,IM data structure engine,支持五种,Key-value最简单。只有Redis有事务机制 。
  适合: 不支持第二索引,在可以控制的数据库大小情况下(放得下整个内存),快速改变数据,快速写数据。
  案例:股票价格系统 分析,实时数据收集,联系等等。
  Redis Cluster可以进行复制和手工failover.

Redis安装

使用Spring Data + Redis实现缓存

基于Spring+redis实现pub/sub

apache camel和 redis

Redis Cluster快速安装指南

介绍Redis数据结构set

介绍Redis数据结构hash

使用Redis创建分布式Java应用程序

 

Riak
  关键点: 容错性Fault tolerance 失败恢复  内置全文本搜索
  适合: 如果你希望有类似Cassandra-like (Dynamo-like)风格, 但是你不想处理器复杂性和膨胀性。单服务器有良好可伸缩性scalability, 可用性availability 和容错性 fault-tolerance, 采取是昂贵的多站点复制multi-site replication.
  案例:销售点数据收集,工厂控制系统,那些不能允许几秒当机的场合。

  Uber的Ringpop和Riak 

HBase
  关键点: 十亿级别的行 X 百万级别的列 大容量
  大表模型(高一致性)。
  Map/reduce with Hadoop 能够实时获得基于查询的优化性能的节约型网关适合:
  适合:随机 实时的读写操作,高吞吐量写,随机访问大数据集。
  案例: Facebook 消息数据库

NOSQL之旅---HBase

Cassandra
  键点: 继承BigTable的列结构、Dynamo的最终一致性。
  按列查询 写快于读 Map/reduce possible with Apache Hadoop
  适合: 当写操作多于读操作 (如logging).
  案例:: 银行Banking, 金融系统,写必须快于都的场合,实时的数据分析等.

HBase和Cassandra 比较

  Hbase更加适合于数据仓库、大型数据的处理和分析(如进行Web页面的索引等)慢活。高一致性CP。

  Cassandra 则更适合于实时事务处理和提供交互型数据 ,快活,最终一致性AP。Cossip 完全对称

Cassandra专题

 

CouchDB
  关键点: 最终一致性, 易用。
  写操作不会阻塞读操作。
  内部嵌入Hadoop之类map/reduce算法。
  实时更新。
  累计计算, 偶尔改变数据, 预先定义的查询. 非常注重版本控制的场合. 举例:: CRM, CMS系统.   主-主复制是其特别亮点,可以易于多个站点部署。

  Couch 适合实时性要求不高,易于使用。文本数据库
  MVCC 模型:copy-on-modified?
  任何修改都会引起一个拷贝,这引起索引修改,再引起一个索引拷贝,以此类推:

  CouchDB 的长处正是Redis的短处
  Redis提供了简单的索引机制和复杂的数据结构,而CouchDB提供的是复杂的索引和简单的数据结构
  CouchDB:存储大量的不易变但会被经常查询的大量的文档型数据。
  Redis :存储小量的常变数据,存储实时数据 。

CouchDB的安装使用教程

 

Couchbase 
  Couchbase基于Membase与CouchDB开发了一款个面向文档的数据库,Membase是个键/值、持久化、可伸缩的解决方案,使用了memcached wire协议。因此,对于数据的读写来说都能提供低延迟的访问。

  与CouchDB区别:Couchbase产品包含了CouchDB的一个副本。Couchbase产品向CouchDB添加了缓存、集群等功能,

  Couchbase在内部数据中心使用Membase风格的复制,在数据中心之间使用CouchDB风格的复制,支持碰撞检测和决议。

Couchbase + Angular + Node.js教程


MongoDB
  关键点: 强迫性一致;类SQL,容易上手 , 内置分片碎片
  适合: 需要动态查询. 愿意事先定义索引indexes, 需要巨大的数据库有良好性能。
  案例:适合90%所有MySQL等RDBM场合。
  问题:数据集大于内存很慢。
  MongoDB 使用MapReduce替代SQL的聚合功能进行分析,但是当前是单线程,并不可伸缩。

MongoDB安装和Java使用教程

MongoDB的优化锁

MongoDB + Morphia使用

MongoDB专题与教程



NEO4J
  图数据库,适合社会网络应用 LinkedIn Facebook 文件系统 角色关系
  由nodes, relationships and properties.组成
  内存中的节点图,自动持久。

 

相关参考:

可扩展伸缩架构中的状态

Nosql概述介绍

NoSQL数据建模

为什么大部分NoSQL不提供分布式事务?

最终一致性其实比MVCC简单

2009年柏林的NoSQL(非关系数据库) 大会

Cassandra HBase和MongoDb性能比较

选择NoSQL的几种理由

NoSQL数据库大比拼: Cassandra, HBase, MongoDB, Riak

数据库缓存

Scalable可伸缩性详细设计

淘宝数据魔方的系统架构

CAP原理和BASE思想

数据库已死

NoDBA(干掉数据库管理员)

事务机制

NoSQL专题

关系数据库专题

可伸缩性

大数据

分布式系统