几种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,还是要根据自身数据特点反复研究讨论才能确定。

MembaseNoSQL 家族的一个新的重量级的成员。 Membase是开源项目,源代码采用了Apache2.0的使用许可。该项目托管在GitHub.Source tarballs上,目前可以 下载beta版本的Linux二进制包。该产品主要是由North Scale的memcached核心团队成员开发完成,其中还包括Zynga和NHN这两个主要贡献者的工程师,这两个组织都是很大的在线游戏和社区网络空间的供应商。 Membase容易安装、操作,可以从单节点方便的扩展到集群,而且为memcached(有线协议的兼容性)实现了即插即用功能,在应用方面为开 发者和经营者提供了一个比较低的门槛。做为缓存解决方案,Memcached已经在不同类型的领域(特别是大容量的Web应用)有了广泛的使用,其中 Memcached的部分基础代码被直接应用到了Membase服务器的前端。 通过兼容多种编程语言和框架,Membase具备了很好的复用性。在安装和配置方面,Membase提供了有效的图形化界面和编程接口,包括可配置 的告警信息。 Membase的目标是提供对外的线性扩展能力,包括为了增加集群容量,可以针对统一的节点进行复制。 另外,对存储的数据进行再分配仍然是必要的。 这方面的一个有趣的特性是NoSQL解决方案所承诺的可预测的性能,类准确性的延迟和吞吐量。通过如下方式可以获得上面提到的特性: •自动将在线数据迁移到低延迟的存储介质的技术(内存,固态硬盘,磁盘) •可选的写操作一一异步,同步(基于复制,持久化) •反向通道再平衡[未来考虑支持] •多线程低锁争用 •尽可能使用异步处理 •自动实现重复数据删除 •动态再平衡现有集群 •通过把数据复制到多个集群单元和支持快速失败转移来提供系统的高可用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值