几种NoSql数据比较: Mongodb、CouchDB、Redis、Membase、Neo4j 、 HBase

随着数据差异性越来越大,数据本身大结构特点也越来越大,再加上应用场景大丰富化,传统的RDB早就不能满足需要,然后Nosql出现了。互联网技术发展开始的前50年,一种技术的出现到灭亡或者发扬光大需要大概七八年的时间,现在可能只需要1-2年,所以在原来一种技术需要发展的周期中,确能出现了三四种新技术,而NoSQL更是出现了十几种之多,这十几种的技术虽说都是所谓的非结构化数据存储系统,但应用场景却也分明,下面我们就大概说一说其中几个。

1. CouchDB

  • 所用语言: Erlang
  • 特点:DB一致性,易于使用
  • 使用许可: Apache
  • 协议: HTTP/REST
  • 双向数据复制
  • 持续进行或临时处理,处理时带冲突检查,因此,采用的是master-master复制
  • MVCC – 写操作不阻塞读操作
  • Crash-only(可靠的)设计
  • 需要不时地进行数据压缩
  • 支持认证
  • 根据变化实时更新

最佳应用场景:适用于数据变化较少,执行预定义查询,进行数据统计的应用程序。适用于需要提供数据版本支持的应用程序。例如: CRM、CMS系统。 master-master复制对于多站点部署是非常有用的。(master-master复制:是一种数据库同步方法,允许数据在一组计算机之间共享数据,并且可以通过小组中任意成员在组内进行数据更新。)

2. Redis

  • 所用语言:C/C++
  • 特点:运行异常快
  • 使用许可: BSD
  • 协议:类 Telnet 有硬盘存储支持的内存数据库
  • Master-slave复制
  • 虽然采用简单数据或以键值索引的哈希表,但也支持复杂操作,例如 ZREVRANGEBYSCORE。 INCR & co
  • Redis支持事务,支持哈希表,支持排序sets,支持队列(阻塞/非阻塞),支持将数据设置成过期数据(类似快速缓冲区设计)
  • Pub/Sub允许用户实现消息机制

最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。
例如:股票价格、数据分析、实时数据搜集、实时通讯。
Master-slave复制:如果同一时刻只有一台服务器处理所有的复制请求,这被称为 Master-slave复制,通常应用在需要提供高可用性的服务器集群。

3. MongoDB

  • 所用语言:C++
  • 特点:保留了SQL一些友好的特性(查询,索引)
  • 使用许可: AGPL(发起者: Apache)
  • 协议: Custom
  • binary( BSON)
  • Master/slave复制(支持自动错误恢复,使用 sets 复制)
  • 内建分片机制
  • 支持javascript表达式查询 可在服务器端执行任意的 javascript函数 update-in-place支持比CouchDB更好
  • 在数据存储时采用内存到文件映射 对性能的关注超过对功能的要求 建议最好打开日志功能(参数 –journal)

最佳应用场景:适用于需要动态查询支持;需要使用索引而不是 map/reduce功能;需要对大数据库有性能要求;需要使用 CouchDB但因为数据改变太频繁而占满内存的应用程序。

4. Membase

  • 所用语言: Erlang和C
  • 特点:兼容 Memcache,但同时兼具持久化和支持集群
  • 使用许可: Apache 2.0
  • 协议:分布式缓存及扩展
  • 非常快速(200k+/秒),通过键值索引数据
  • 可持久化存储到硬盘
  • 所有节点都是唯一的( master-master复制)
  • 在内存中同样支持类似分布式缓存的缓存单元
  • 写数据时通过去除重复数据来减少 IO
  • 提供非常好的集群管理 web界面
  • 更新软件时软无需停止数据库服务
  • 支持连接池和多路复用的连接代理

最佳应用场景:适用于需要低延迟数据访问,高并发支持以及高可用性的应用程序,例如:低延迟数据访问比如以广告为目标的应用,高并发的 web 应用比如网络游戏。

5. Neo4j

  • 所用语言: Java
  • 特点:基于关系的图形数据库
  • 使用许可: GPL,其中一些特性使用 AGPL/商业许可
  • 协议: HTTP/REST(或嵌入在 Java中)
  • 可独立使用或嵌入到 Java应用程序
  • 图形的节点和边都可以带有元数据
  • 很好的自带web管理功能
  • 使用多种算法支持路径搜索
  • 使用键值和关系进行索引
  • 为读操作进行优化
  • 支持事务(用 Java api)
  • 使用 Gremlin图形遍历语言
  • 支持 Groovy脚本
  • 支持在线备份,高级监控及高可靠性支持使用 AGPL/商业许可

最佳应用场景:适用于图形一类数据。这是 Neo4j与其他nosql数据库的最显著区别。例如:社会关系,公共交通网络,地图及网络拓谱。

6. HBase

  • 所用语言: Java
  • 特点:支持数十亿行X上百万列
  • 使用许可: Apache
  • 协议:HTTP/REST (支持 Thrift,见编注4)
  • 在 BigTable之后建模
  • 采用分布式架构 Map/reduce
  • 对实时查询进行优化
  • 高性能 Thrift网关
  • 通过在server端扫描及过滤实现对查询操作预判
  • 支持 XML, Protobuf, 和binary的HTTP
  • Cascading, hive, and pig source and sink modules
  • 基于 Jruby( JIRB)的shell
  • 对配置改变和较小的升级都会重新回滚
  • 不会出现单点故障
  • 堪比MySQL的随机访问性能

最佳应用场景:适用于偏好BigTable:)并且需要对大数据进行随机、实时访问的场合。
例如: Facebook消息数据库。

当然上述特点肯定只是系统所有特点中的一部分,我也是在学习过程中接触到,当然有些也是google到的,项目中具体采用那种DB,还是要根据自身数据特点反复研究讨论才能确定。

猜你喜欢

转载自blog.csdn.net/zombres/article/details/79207348