Krist f Kov CS是一个软件设计师和顾问,他做了各种类型的NoSQL数据库比较最近。
虽然SQL数据库是一个非常有用的工具,但在15年的单一展示之后,它将被打破,这只是时间问题:被迫使用关系数据库,但它并不是太多以至于无法适应需求。
但在NoSQL数据库的差异远远超过2 SQL数据库之间的差异,这意味着软件架构师应该选择在项目开始一个合适的NoSQL数据库。在这种情况下,卡桑德拉,mondb,CouchDB,redis,Riak,Membase,Neo4j和HBase,比较。
(1:NoSQL数据库:一个新的革命运动,主张提倡使用NoSQL非关系型数据存储。今天的计算机体系结构需要一个巨大的数据存储,可扩展性和NoSQL是致力于改变这种状况。目前,BigTable和Amazon Dynamo的眉目传情使用NoSQL数据库。看到NoSQL的条目。)
1。CouchDB
使用的语言:Erlang
特点:DB一致性好,使用方便
使用许可证:Apache
协议:HTTP / REST
双向数据复制,
连续或暂时处理,
冲突检查处理时间,
因此,使用主复制(参见编辑器2)。
MVCC -写操作非阻塞读操作
可以保存文件的前一个版本。
仅崩溃(可靠)设计
数据压缩需要不时地执行。
视图:嵌入映射/还原
格式化视图:列表显示
支持服务器端文档验证
支持认证
基于更改的实时更新
支持附件处理
所以,CouchApps(独立的js应用)
需要jQuery库
最好的应用场景:适用于较少更改数据、执行预定义查询和进行数据统计的应用程序。它适合需要提供数据版本支持的应用程序。
例如:CRM,CMS system.master-master复制多站点部署是非常有用的。
(注2:主复制:一种数据库同步方法,它允许数据在一组计算机之间共享数据,并且可以由组中的任何成员更新任何组中的数据)。
2。redis
使用语言:C / C++
特点:快速运行
使用BSD许可:
协议:类telnet
硬盘存储支持的内存数据库,
但是在版本2之后,数据可以被交换到硬盘上(注意2.4的后一版本不支持这个功能!)
主从复制(参见编辑器3)
而使用简单的数据或哈希表的索引键值,它也支持复杂的操作,如zrevrangebyscore。
增加CO(适合计算极限值或统计数据)
支持集(也支持联盟)
支持列表(也支持队列;阻止POP操作)
哈希表(具有多个域的对象)
支持排序集(高得分表,适用于范围查询)
redis支持交易
支持将数据设置为过期数据(类似于快速缓冲区设计)
允许用户实现消息机制。
最佳应用场景:适用于数据快速变化和数据库大小的应用程序(适用于内存容量)。
例如股票价格,数据分析,实时数据采集,实时通信。
(注3:主从复制:如果只有一个服务器同时处理所有的复制请求,这称为主从复制,它通常应用于需要高可用性的服务器集群。
三.mondb
使用C++语言:
特性:保留一些SQL友好的特性(查询、索引)。
使用权限:AGPL(引发剂:Apache)
协议:自定义,二进制(BSON)
主/从复制(支持自动错误恢复,使用集合复制)
建筑物内部破碎机理
支持Javascript表达式查询
任何Javascript函数都可以在服务器端执行。
在更新的支持比CouchDB
在数据存储中使用内存到文件映射
更多关注性能而不是功能需求
建议最好打开日志函数(参数日志)。
在32位操作系统,数据库的大小限制为约2.5gb
关于192mb空的数据库帐户
使用GridFS存储大量数据或元数据(不是真正的文件系统)
最佳应用方案适用于支持动态查询;索引而不是地图/减少功能是必要的;对于大型数据库性能的要求;需要应用CouchDB占据由于频繁的数据的变化,太多的记忆。
例如:你会想使用MySQL或PostgreSQL,但因为自己预先定义的列是禁止的。
4。Riak
使用的语言:Erlang和C,以及一些Javascript
特点:容错性
使用许可证:Apache
协议:HTTP或REST或自定义二进制文件
可调分布和复制(n,r,w)
使用Javascript或Erlang在操作之前或之后验证和确保支持。
使用javascript或Erlang进行映射/缩小
连接和连接遍历:可以用作图形数据库。
索引:用于搜索的输入元数据(即将推出1版)
大数据对象支持(猫)
提供两个版本的开源和企业
全文检索,索引,Riak搜索服务器查询(测试版)
对于无主多站点复制和营业执照的SNMP监控
应用场景:最好的情况下你想使用一个类似卡桑德拉的地方(如电机)数据库,但不能处理膨胀和复杂性。很适合你做的多个站点的复制品,但它也需要的可扩展性,可用性,和错误的一个单一的现场处理。
例如:销售数据收集、工厂控制系统;对停机时间有严格的要求;可以很容易地更新Web服务器。
5。Membase
使用的语言:Erlang和C
特点:兼容Memcache,但同时坚持和支持集群
许可使用:Apache 2
协议:分布式缓存和扩展
很快(20万/秒),通过关键值指标数据
硬盘的持久存储
所有节点都是唯一的(主主复制)
在内存中,它还支持类似于分布式缓存的缓存单元。
在写入数据时删除重复数据减少IO
提供一个非常好的集群管理Web接口
更新软件时不停止数据库服务的软件
连接池和多路复用连接代理
最佳应用场景:用于低延迟数据访问、高并发支持和高可用性的应用程序
例如:低延迟的数据访问,如面向广告的应用程序、高并发Web应用程序(如Zynga)。
6。Neo4j
使用java语言:
特征:基于关系的图形数据库
使用GPL许可证:,其中一些采用AGPL /营业执照
协议:HTTP /休息(或嵌入java)
可以独立使用或嵌入在java中的应用
图形的节点和边可以有元数据。
良好的网络管理能力
使用多种算法支持路径搜索
使用键值和关系进行索引
优化阅读操作
支持事务(与java API)
使用Gremlin图形遍历语言
支持Groovy脚本
支持在线备份,先进的监测,和高可靠性支持采用AGPL /营业执照
最佳应用场景:适用于数字数据。这是Neo4j和其他NoSQL数据库最显著的区别
例如:社会关系、公共交通网络和网络拓扑图。
7。卡桑德拉
使用java语言:
特点:对大型表单和发电机的最佳支持
使用许可证:Apache
协议:自定义二进制(保存类型)
可调分布和复制(n,r,w)
通过一定范围的键值支持列查询。
类似于大表单的函数:列、特定功能的列集
写作比读书快。
尽可能多地基于Apache分布式平台来映射/减少
我承认卡桑德拉是有偏见的,部分原因是因为它的臃肿和复杂性,因为java问题(配置,例外,等)
最佳应用场景:当写操作来读过很多遍(日志),如果是建立一个系统,它必须是用java写的(没有人是因为被Apache软件)。
例如,银行业和金融业(虽然不一定是金融交易,但这些行业需要比它们更多的数据库)要比阅读快得多,所以自然特征是实时数据分析。
8 HBase
(用ghshephard)
使用java语言:
功能:支持数以百万计的列的数十亿行X
使用许可证:Apache
协议:HTTP / REST(支持节俭,见编辑器4)
建模后就
使用分布式体系结构图/减少
实时查询优化
高性能储蓄网关
预先查询操作的扫描和在服务器端过滤
支持XML和HTTP,protobuf,二进制
级联、蜂房和猪源和汇模块
基于JRuby壳(jirb)
配置更改和较小的升级都将回滚。
不会出现单点故障。
MySQL的随机存取性能
最佳应用场景:对于偏好就)和随机的场合,实时获取大数据。
例如:脸谱网消息数据库(更常见的用例正在出现)
4:节约是一种接口定义语言,它为脸谱网开发和开放多种语言提供定义和创建服务。
当然,所有的系统都有上面列出的特性,这里我只列出一些我认为从我自己的角度来看的重要特性,同时,技术进步很快,所以上面的内容必须不断更新,我会尽可能地更新这个列表。