NoSQL HBase、Cassandra、MongoDB 对比

/ HbaseCassandraMongoDB / 没有评论 / 7039浏览

NoSQL HBase、Cassandra、MongoDB 对比

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

排名(Ranking Trend)

简单看一下当前的排名

201982215282-all-db-rank

2019822153039-wide-column-store

2019822153219-TSDB

HBase

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

主要特点(HBase Features)

使用场景(HBase Scenario)

不擅长的场景(HBase Weakness)

Cassandra

宽列式数据库,基于 BigTableDynamoDB 的概念。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 数据库,其实现原理和 HBaseCassandra 还是有本质区别。简单测试了一下当把写入数据量增加到 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