Redis、mongo、Cassandra 、hbase等nosql数据库比较
背景
虽然关系型(SQL)数据库是非常有用的工具,NoSQL数据库逐渐得到更多人的认可!
但是,NoSQL数据库之间的差异比以往SQL数据库之间的差异要大得多。这意味着软件架构师有更大的责任在一开始就为项目选择合适的软件。
在此,我们比较一下开源NOSQL数据库Cassandra、Mongodb、CouchDB、Redis、Riak、RethinkDB、Couchbase(前membase)、Hypertable、ElasticSearch、Accumulo、voldb、Kyoto Tycoon、Scalaris、OrientDB、Aerospike、Neo4j和HBase。
Redis(V3.2)
官网:https://redis.io/
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. Redis provides data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes, and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions, and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.
功能特点
实现语言 |
C |
特点 |
快速查找 |
许可 |
BSD |
协议 |
类似telnet,二进制安全 |
磁盘支持 |
内存数据库 |
高可用 |
主从复制,自动故障切换 |
功能特点 |
键的简单值或数据结构 |
也有ZREVRANGEBYSCORE这样的复杂操作。 |
|
INCR & co(适用于限速或统计) |
|
位和位域操作(例如实现bloom过滤器) |
|
有集合(也有union/diff/inter) |
|
具有列表(也是一个队列;阻塞pop) |
|
具有哈希值(多个字段的对象) |
|
排序集(排行榜,适合范围查询) |
|
可以将值设置为过期(如在缓存中) |
|
发布/订阅让你实现消息传递 |
|
GEO API按半径查询(!) |
|
脚本 |
Lua脚本功能 |
事务 |
支持事务 |
使用场景
用于具有可预见的数据库大小(应该主要适合内存)的快速更改数据。
例如:存储实时股票价格、实时分析、游戏排行榜、实时通信、以及你以前用过memcached的地方。
MongoDB (3.2)
官网:https://www.mongodb.com/
MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era.
功能特点
实现语言 |
c++ |
特点 |
JSON文档存储 |
许可 |
AGPL(驱动程序:Apache) |
协议 |
自定义,二进制(BSON) |
高可用 |
主/从复制(使用复制集自动故障转移) |
功能特点 |
分片内置 |
查询是javascript表达式 |
|
在服务器端运行任意javascript函数 |
|
地理空间查询 |
|
多个存储引擎,具有不同的性能特性 |
|
高性能 |
|
文档验证 |
|
日志记录 |
|
强大的聚合框架 |
|
在32位系统上,限制为~2.5Gb |
|
文本搜索集成 |
|
GridFS存储大数据+元数据(不是真正的FS) |
|
有地理空间索引 |
|
多数据中心 |
使用场景
如果您需要动态查询。如果你更喜欢定义索引,而不是map/reduce函数。如果你需要在大量数据上有良好的性能。如果您需要CouchDB,但是您的数据更改太多,会填满磁盘。
例如:对于使用MySQL或PostgreSQL做的大多数事情来说,使用预定义的列确实会拖你的后腿。
Cassandra (2.0)
官网:
https://cassandra.apache.org/
The Apache Cassandra database is the right choice when you need scalability and high availability without compromising performance. Linear scalability and proven fault-tolerance on commodity hardware or cloud infrastructure make it the perfect platform for mission-critical data. Cassandra's support for replicating across multiple datacenters is best-in-class, providing lower latency for your users and the peace of mind of knowing that you can survive regional outages.
功能特点
实现语言 |
Java |
特点 |
近乎SQL中存储巨大的数据集 |
许可 |
Apache许可证 |
协议 |
CQL3 & Thrift |
CQL3非常类似于SQL,但是有一些来自可伸缩性的限制(最明显的是:没有连接,没有聚合函数)。 |
|
CQL3现在是官方推荐。不要去看Thrift,除非你是在开发一个传统的应用程序。这样,你可以不用理解列族、超级列等。 |
|
功能特点 |
按键或键范围查询(还提供二级索引) |
分布和复制的可调折衷(N, R, W) |
|
数据可以有过期(插入时设置)。 |
|
写比读快得多(当读是磁盘绑定的时候) |
|
与Apache Hadoop的Map/reduce相似 |
|
与Hadoop/Hbase不同的是所有节点都是类似的 |
|
非常好的和可靠的跨数据中心复制 |
|
分布式数据类型 |
|
您可以用Java编写触发器。 |
使用场景
当您需要存储的数据太大,以至于服务器无法容纳,但仍然需要一个友好的熟悉的接口。
例如:Web分析,按小时、按浏览器、按IP等计算点击量。事务日志记录。从巨大的传感器阵列收集数据。
HBase (V0.92.0)
官方网站:https://hbase.apache.org/
Use Apache HBase™ when you need random, realtime read/write access to your Big Data. This project's goal is the hosting of very large tables -- billions of rows X millions of columns -- atop clusters of commodity hardware. Apache HBase is an open-source, distributed, versioned, non-relational database modeled after Google's Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System, Apache HBase provides Bigtable-like capabilities on top of Hadoop and HDFS.
功能特点
实现语言 |
Java |
特点 |
数十亿行 X 数百万列 |
许可 |
Apache许可证 |
协议 |
HTTP/REST(也是Thrift) |
功能特点 |
模仿谷歌的BigTable |
使用Hadoop的HDFS作为存储 |
|
使用Hadoop Map / reduce |
|
通过服务器端扫描和获取过滤器查询谓词下推 |
|
实时查询的优化 |
|
高性能Thrift网关 |
|
HTTP支持XML、Protobuf和二进制 |
|
基于Jruby(JIRB)扩展 |
|
对配置更改和小升级进行滚动重启 |
|
随机访问性能与MySQL类似 |
|
集群由几种不同类型的节点组成 |
使用场景
最好是已经使用Hadoop/HDFS栈。
例如:搜索引擎。分析日志数据。任何需要扫描巨大的二维无连接表的地方。
未完待续。。。。。。。。。。。。。。。。。。。。。。。。。。。
参考资料:
https://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis