NoSQL HBase、Cassandra、MongoDB 对比

/ HbaseCassandraMongoDB / 没有评论 / 9012浏览

NoSQL HBase、Cassandra、MongoDB 对比

主要从生态、性能、服务化难易程度、技术栈方面来探索、对比 HBase、Cassandra、MongoDB 三个数据库。

排名(Ranking Trend)

简单看一下当前的排名

201982215282-all-db-rank

2019822153039-wide-column-store

2019822153219-TSDB

HBase

宽列式数据库,基于 Apache Hadoop 和 BigTable 的概念。Hbase 有集中式架构, Master 服务器负责监控集群中的所有 RegionServer(负责服务和管理区域)实例,它也是查看所有元数据变化的界面。它提供了 CAP 原理中的 CP(一致性和可用性)。

主要特点(HBase Features)

使用场景(HBase Scenario)

不擅长的场景(HBase Weakness)

Cassandra

宽列式数据库,基于 BigTable 和 DynamoDB 的概念。Cassandra 拥有分散式架构。任何节点都能执行任何操作。它提供了 CAP 原理中的 AP(可用性和分区可容忍性)。

主要特点(Cassandra Features)

使用场景(Cassandra Scenario)

不擅长的场景(Cassandra Weakness)

MongoDB

它是一种面向文档的数据库。Mongodb 中的所有数据以 JSON/BSON 格式来处理。它是一种无模式数据库,数据库中的数据量超过 TB 级。它还支持主从复制方法,以便在服务器上复制数据的多个副本,从而使得某些应用系统中的数据整合来得更容易、更快速。

MongoDB 保留了关系数据库最宝贵的功能特性:强一致性、表达式查询语言和辅助索引。因而,开发人员能够以比 NoSQL 数据库更快的速度来构建高度实用的应用程序。

主要特点(MongoDB Features)

使用场景(MongoDB Scenario)

不擅长的场景(MongoDB Weakness)

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

2019823111135-nosql-load-test

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”).

2019823111331-mix-test

实测(Testing)

测试方法(Testing Method)

# 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)测试命令
1Cassandraapache-cassandra-3.11.4load6122.199223263bin/ycsb load cassandra-cql -P workloads/workloada -p hosts="127.0.0.1" -p recordcount=2000000 -p threads=10
2Cassandraapache-cassandra-3.11.4run6473.875211(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
3hbase1.2hbase-1.2.6.1/hadoop-3.0.3/zookeeper-3.4.13load2984.723431734bin/ycsb load hbase10 -P workloads/workloada -p table=usertable -p columnfamily=family -p recordcount=2000000 -p threads=10
4hbase1.2hbase-1.2.6.1/hadoop-3.0.3/zookeeper-3.4.13run3164.362349(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
5hbase2.2hbase-2.2.0/hadoop-3.0.3/zookeeper-3.4.13load4538.811281405bin/ycsb load hbase20 -P workloads/workloada -p table=usertable -p columnfamily=family -p recordcount=2000000 -p threads=10
6hbase2.2hbase-2.2.0/hadoop-3.0.3/zookeeper-3.4.13run4200.772292(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
7MongoDBMongoDB shell version: 2.6.10load9834.43798341bin/ycsb load mongodb -P workloads/workloada -p recordcount=2000000 -p threads=10
8MongoDBMongoDB shell version: 2.6.10run19780.04631(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)

从架构、性能、生态、服务化难易程度,以及团队的技术栈等方面做一个简单的分析对比,为选型提供数据支撑。这里忽略了一个比较重要的因素,就是业务,因为当前业务场景待定,暂时忽略这个因素。实际情况可能会根据不同的业务来选取不同类型的数据库。

NameHBaseCassandraMongoDB
架构Wide Column StoreWide Column StoreDocument Store
ReplicationMaster-Slave ReplicationMasterless RingMaster-Slave Replication
Programming Language (Base Code)JavaJavaC++
服务化DifficultyNormalNormal
性能⭐️⭐️⭐️⭐️⭐️⭐️⭐️(参考以上数据)
大数据生态圈⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️
使用场景Online Log Analytics, Hadoop, Write Heavy Applications, MapReducSensor Data, Messaging Systems, E-commerce Websites, Always-On Applications, Fraud Detection for BanksOperational Intelligence, Product Data Management, Content Management Systems, IoT, Real-Time Analytics
团队技术栈⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️

※ 以上 ⭐ ️评价目前是以我掌握的信息主观评价,并不一定客观

结论(Summary)

参考(Reference)

NoSQL_Benchmarks_EndPoint

System Properties Comparison HBase vs. MongoDB

apache-cassandra-leads-nosql-benchmark

mongodb-hbase

2016_NoSQL_Database_Performance_Report

nosql-database-comparison

DB-Engines Ranking