随着数据差异性越来越大,数据本身大结构特点也越来越大,再加上应用场景大丰富化,传统的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,还是要根据自身数据特点反复研究讨论才能确定。