NoSQL HBase、Cassandra、MongoDB 对比
主要从生态、性能、服务化难易程度、技术栈方面来探索、对比 HBase、Cassandra、MongoDB
三个数据库。
排名(Ranking Trend)
简单看一下当前的排名
- 全量排名
- 宽表数据库排名
- 时序数据库排名
HBase
宽列式数据库,基于 Apache Hadoop
和 BigTable
的概念。Hbase
有集中式架构, Master
服务器负责监控集群中的所有 RegionServer
(负责服务和管理区域)实例,它也是查看所有元数据变化的界面。它提供了 CAP
原理中的 CP
(一致性和可用性)。
主要特点(HBase Features)
- 分布式和可扩展的庞大数据存储系统
- 强一致性
- 建立在Hadoop HDFS的基础上
CAP
中的CP
- 高可用,线性伸缩
使用场景(HBase Scenario)
- Random, real-time read/write access to Big Data
- 快速读写的场景
- 基于
Row Key
的范围扫描 - 对一致性有严格要求的场景
不擅长的场景(HBase Weakness)
- 典型的事务型应用程序或甚至关系分析
- 应用程序需要全表扫描/模糊匹配
- 数据需要跨聚合、累积以及跨行分析
Cassandra
宽列式数据库,基于 BigTable
和 DynamoDB
的概念。Cassandra
拥有分散式架构。任何节点都能执行任何操作。它提供了 CAP
原理中的 AP
(可用性和分区可容忍性)。
主要特点(Cassandra Features)
- 高可用性,逐步可扩展性
- 最终一致性,平衡一致性和延时
- 最小化管理
- 没有单一故障点 ――
Cassandra
中所有节点都一样 CAP
中的AP
使用场景(Cassandra Scenario)
- 简单的安装,维护节点
- 快速随机性读取/写入
- 灵活的解析/宽列需求
- 不需要多个辅助索引
不擅长的场景(Cassandra Weakness)
- 辅助索引
- 关系数据
- 事务型操作(回滚和提交)
- 主记录/财务记录
- 对数据需要严格的授权
- 针对列数据的动态查询/搜索
- 低延迟
MongoDB
它是一种面向文档的数据库。Mongodb
中的所有数据以 JSON/BSON
格式来处理。它是一种无模式数据库,数据库中的数据量超过 TB
级。它还支持主从复制方法,以便在服务器上复制数据的多个副本,从而使得某些应用系统中的数据整合来得更容易、更快速。
MongoDB
保留了关系数据库最宝贵的功能特性:强一致性、表达式查询语言和辅助索引。因而,开发人员能够以比 NoSQL
数据库更快的速度来构建高度实用的应用程序。
主要特点(MongoDB Features)
- 应用程序完善后,模式随之变化(无模式)
- 支持全索引,实现高性能
- 复制和故障切换,实现高可用性
- 自动分片,易于扩展
- 基于丰富文档的查询,易于读取
- 主从模式
CAP
中的CP
使用场景(MongoDB Scenario)
- 取代Web应用的RDBMS
- 半结构化内容管理
- 实时分析和高速日志、缓存和高扩展性
- Web 2.0、媒体、SaaS和游戏
不擅长的场景(MongoDB Weakness)
- 高度事务型系统
- 存在传统数据库需求的应用程序,比如外键约束。
- 内存占用较高
- Limited Data Size,not more than 16MB
- Limited Nesting,cannot perform nesting of documents for more than 100 levels
NoSQL Performance Benchmarks
第三方测试结果(Third party test results)
benchmarks-cassandra-vs-mongodb-vs-hbase
Throughput by Workload
Each workload appears below with the throughput/operations-per-second (more is better) graphed vertically, the number of nodes used for the workload displayed horizontally, and a table with the result numbers following each graph.
Load process
For load, Couchbase, HBase, and MongoDB all had to be configured for non-durable writes to complete in a reasonable amount of time, with Cassandra being the only database performing durable write operations. Therefore, the numbers below for Couchbase, HBase, and MongoDB represent non-durable write metrics
Mixed Operational and Analytical Workload
Note that Couchbase was eliminated from this test because it does not support scan operations (producing the error: “Range scan is not supported”).
实测(Testing)
测试方法(Testing Method)
- 使用
Yahoo
开源的测试套件 YCSB,验证测试 Workload A 用例 - 每次测试前都重启机器,重新启动相应的服务,然后进行测试
- 在单机单节点默认配置进行测试,硬件信息如下:
# CPU 信息
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 142
Model name: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
Stepping: 10
CPU MHz: 701.941
CPU max MHz: 3400.0000
CPU min MHz: 400.0000
BogoMIPS: 3600.00
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 6144K
NUMA node0 CPU(s): 0-7
# 内存信息
$ free -m
total used free shared buff/cache available
Mem: 7837 2914 2079 4 2843 4526
Swap: 8051
# 硬盘信息
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 238.5G 0 disk
├─sda2 8:2 0 230.1G 0 part /
├─sda3 8:3 0 7.9G 0 part [SWAP]
└─sda1 8:1 0 512M 0 part /boot/efi
Testing Result
序号 | 组件 | 版本 | 测试类型 | Throughput(ops/sec) | 95thPercentileLatency(us) | 99thPercentileLatency(us) | 测试命令 |
---|---|---|---|---|---|---|---|
1 | Cassandra | apache-cassandra-3.11.4 | load | 6122.199 | 223 | 263 | bin/ycsb load cassandra-cql -P workloads/workloada -p hosts="127.0.0.1" -p recordcount=2000000 -p threads=10 |
2 | Cassandra | apache-cassandra-3.11.4 | run | 6473.875 | 211(READ),170(UPDATE) | 262(READ),225(UPDATE) | bin/ycsb run cassandra-cql -P workloads/workloada -p hosts="127.0.0.1" -p operationcount=2000000 -p threads=10 |
3 | hbase1.2 | hbase-1.2.6.1/hadoop-3.0.3/zookeeper-3.4.13 | load | 2984.723 | 431 | 734 | bin/ycsb load hbase10 -P workloads/workloada -p table=usertable -p columnfamily=family -p recordcount=2000000 -p threads=10 |
4 | hbase1.2 | hbase-1.2.6.1/hadoop-3.0.3/zookeeper-3.4.13 | run | 3164.362 | 349(READ),535(UPDATE) | 777(READ),1444(UPDATE) | bin/ycsb run hbase10 -P workloads/workloada -p table=usertable -p columnfamily=family -p operationcount=2000000 -p threads=10 |
5 | hbase2.2 | hbase-2.2.0/hadoop-3.0.3/zookeeper-3.4.13 | load | 4538.811 | 281 | 405 | bin/ycsb load hbase20 -P workloads/workloada -p table=usertable -p columnfamily=family -p recordcount=2000000 -p threads=10 |
6 | hbase2.2 | hbase-2.2.0/hadoop-3.0.3/zookeeper-3.4.13 | run | 4200.772 | 292(READ),335(UPDATE) | 360(READ),433(UPDATE) | bin/ycsb run hbase20 -P workloads/workloada -p table=usertable -p columnfamily=family -p operationcount=2000000 -p threads=10 |
7 | MongoDB | MongoDB shell version: 2.6.10 | load | 9834.437 | 98 | 341 | bin/ycsb load mongodb -P workloads/workloada -p recordcount=2000000 -p threads=10 |
8 | MongoDB | MongoDB shell version: 2.6.10 | run | 19780.046 | 31(READ),67(UPDATE) | 59(READ),92(UPDATE) | bin/ycsb run mongodb -P workloads/workloada -p operationcount=2000000 -p threads=10 |
以上是自己的测试结果,和第三方给出的测试结果不一致,主要是 MongoDB
性能相比第三方好很多;简单分析原因:第一,本次为验证性试验只测试了单节点小数据量的场景;第二此时场景较少,只测试了数据写入和数据读取更新两种场景;第三,MongoDB
虽然也是 NoSQL
数据库,其实现原理和 HBase
和 Cassandra
还是有本质区别。简单测试了一下当把写入数据量增加到 20000000
写入性能有明显下降,当数据规模达到一定程度测试结果应该与第三方结果一致。
对比(Comprasion)
从架构、性能、生态、服务化难易程度,以及团队的技术栈等方面做一个简单的分析对比,为选型提供数据支撑。这里忽略了一个比较重要的因素,就是业务,因为当前业务场景待定,暂时忽略这个因素。实际情况可能会根据不同的业务来选取不同类型的数据库。
Name | HBase | Cassandra | MongoDB |
---|---|---|---|
架构 | Wide Column Store | Wide Column Store | Document Store |
Replication | Master-Slave Replication | Masterless Ring | Master-Slave Replication |
Programming Language (Base Code) | Java | Java | C++ |
服务化 | Difficulty | Normal | Normal |
性能 | ⭐️⭐️⭐️ | ⭐️⭐️⭐️⭐️ | (参考以上数据) |
大数据生态圈 | ⭐️⭐️⭐️⭐️⭐️ | ⭐️⭐️⭐️ | ⭐️⭐️⭐️⭐️ |
使用场景 | Online Log Analytics, Hadoop, Write Heavy Applications, MapReduc | Sensor Data, Messaging Systems, E-commerce Websites, Always-On Applications, Fraud Detection for Banks | Operational Intelligence, Product Data Management, Content Management Systems, IoT, Real-Time Analytics |
团队技术栈 | ⭐️⭐️⭐️⭐️ | ⭐️⭐️ | ⭐️⭐️⭐️ |
※ 以上 ⭐ ️评价目前是以我掌握的信息主观评价,并不一定客观
结论(Summary)
- 三种
NoSQL
数据库并没有一种在各方面都完全性压倒优势的,不同的场景个有优缺点 HBase
大数据生态最为完整和丰富,案列解决方案较多,但是部署、维护、调优、服务化复杂,依赖组件较多。MongoDB
提供了NoSQL数据库的数据模型灵活性、弹性可扩展性以及高性能,大数据生态不如 HBase,数据的存储、压缩能力远不如HBase
。Cassandra
技术实现和HBase
类似,但架构相比HBase
更简单,服务化比 HBase 更容易,大数据生态不如HBase
。- 中短期考虑
DBaaS
探索研究可以先使用Cassandra
尝试,先掌握服务化尤其是在K8s
架构中的服务化。
参考(Reference)
System Properties Comparison HBase vs. MongoDB
apache-cassandra-leads-nosql-benchmark
2016_NoSQL_Database_Performance_Report
本文由 zealzhangz 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2020/03/15 22:07