当前位置: 首页 > article >正文

HBase、Hive、Redis 和 MongoDB的对比

1. 数据库管理

操作HBaseHiveRedisMongoDB
创建数据库N/A (HBase 没有数据库概念)CREATE DATABASE db_name;N/A (Redis 没有数据库命名功能)use db_name; (自动创建)
查看数据库N/ASHOW DATABASES;INFO 查看全局信息show dbs;
删除数据库N/ADROP DATABASE db_name CASCADE;N/Adb.dropDatabase();
切换数据库N/AUSE db_name;SELECT db_indexuse db_name;

2. 表管理

以下是 HBaseHiveRedisMongoDB 中进行表结构增改操作的总结,具体包括表的增加和修改操作。

操作HBaseHiveRedisMongoDB
增加表创建时指定列族 create 'table_name', 'cf1', 'cf2'
创建带版本的表 create 'version_table', {NAME => 'cf', VERSIONS => 5}
CREATE TABLE table_name (...);N/A (键值对模型,没有表结构)db.createCollection("table_name")
修改表alter 'table_name', {NAME => 'new_cf', METHOD => 'add'}
添加列族或修改表的配置
ALTER TABLE table_name ADD COLUMNS (column_definition);修改键值对:SET key_name valuedb.table_name.updateOne(),
db.table_name.updateMany()
查看表listSHOW TABLES;KEYS * 查询所有键show collections;
表结构describe 'table_name'DESCRIBE table_name;
查看详细信息
DESCRIBE table_name;
N/Adb.table_name.stats()
删除表disable 'table_name'
drop 'table_name'
DROP TABLE table_name;DEL key_namedb.table_name.drop()

3. 数据操作

插入数据
操作HBaseHiveRedisMongoDB
插入单行put 'table_name', 'row1', 'cf1:col1', 'value'INSERT INTO table_name VALUES (...);插入键值对字段SET key value 插入哈希表字段 HSET hkey:hvalue key valuedb.table_name.insert({...})
批量插入使用脚本或 API 插入LOAD DATA INPATH 'path' INTO TABLE ...;MSET key1 value1 key2 value2db.table_name.insertMany([{...}])

查询数据
操作HBaseHiveRedisMongoDB
查询所有数据scan 'table_name'SELECT * FROM table_name;KEYS * 查询所有键HGETALL hkey:hvaluedb.table_name.find()
按条件查询get 'table_name', 'row1' 查询版本数据get 'my_table', 'row1', {COLUMN => 'cf:column1', VERSIONS => 3}SELECT * FROM table_name WHERE ...;GET keydb.table_name.find({...})
字段查询get 'table_name', 'row1', 'cf1:col1'SELECT col1 FROM table_name;HGET hkey:hvalue key valuedb.table_name.find({}, {field: 1})

更新数据
操作HBaseHiveRedisMongoDB
更新单个值put 'table_name', 'row1', 'cf1:col1', 'new_value'UPDATE table_name SET col1 = ... WHERE ...;SET key new_valuedb.table_name.updateOne({...}, {$set: {...}},true.false)参数1:查询条件,类似sql update 查询内 where 后的条件;参数2:update 的对象,类似 sql 中 update 中 set 后的内容;参数3:如果没有 update 的记录,true 表示插入,默认 false, 表示不插入;参数4:默认 false 表示只更新找到的第一条记录,true 表示更新所有满足条件的记录。
批量更新使用脚本或 API 批量更新批量更新不常见不支持直接批量更新,需逐个设置db.table_name.updateMany({...}, {$set: {...}})

删除数据
操作HBaseHiveRedisMongoDB
删除单行delete 'table_name', 'row1'DELETE FROM table_name WHERE ...;DEL keydb.table_name.deleteOne({...})
删除某字段delete 'table_name', 'row1', 'cf1:col1'N/AHDEL hash_key fielddb.table_name.update({...}, {$unset: {field: 1}})
删除所有数据删除表再重建TRUNCATE TABLE table_name;FLUSHDBdb.table_name.deleteMany({})

4. 其他管理操作

操作HBaseHiveRedisMongoDB
查看存储状态status查看 Hadoop 状态,需依赖 HDFSINFO 查看运行状态db.stats()
备份数据使用快照或导出工具使用 HDFS 导入导出功能保存 RDB/AOF 文件使用 mongodump
恢复数据使用快照恢复使用 HDFS 数据恢复载入 RDB/AOF 文件使用 mongorestore
查看日志检查 HBase 日志目录检查 Hadoop 日志查看 Redis 日志文件查看 MongoDB 日志文件

启动和关闭操作总结

数据库启动命令关闭命令说明
Hadoop./sbin/start-dfs.shstart-yarn.sh./sbin/stop-dfs.shstop-yarn.sh启动 Hadoop 分布式文件系统(HDFS)和资源调度框架(YARN),其他组件如 Hive/HBase 均依赖它
HBase./bin/start-hbase.sh./bin/stop-hbase.sh集群模式下,需确保 Zookeeper 服务已启动;依赖 HDFS 提供存储支持
Hive./bin/hivehive --service hiveserver2 &exit需先启动 Hadoop 服务,包括 HDFS 和 YARN,Hive 基于 Hadoop 提供 SQL 接口
Redis./src/redis-serverredis-cli shutdownkill <pid>简单高效,适合开发和缓存场景,独立运行,无需依赖其他服务
MongoDBsudo service mongod startmongod --config ...sudo service mongod stopdb.shutdownServer()默认无密码,生产环境建议配置用户权限和访问限制,独立运行,无需依赖其他服务

特点总结

数据库特点对比表

特性/维度HBaseHiveRedisMongoDB
数据库类型分布式 NoSQL 数据库,基于 HDFS 的列式存储分布式 SQL 数据仓库,基于 Hadoop 的批处理框架内存型键值对数据库文档型 NoSQL 数据库,最像关系型数据库的非关系型数据库
数据模型行键 + 列族 + 列的多维度数据模型传统关系型数据库表模型(Schema),支持分区表和桶表键值对模型(字符串、哈希、列表、集合、有序集合、Stream)BSON 文档模型(类 JSON),支持嵌套数据
存储机制基于 HDFS 的列族存储,分布式存储,适合稀疏表基于 HDFS 存储,通过 MapReduce 或 Tez 实现查询和处理内存存储,支持持久化为 RDB 文件或 AOF 文件二进制 JSON (BSON) 存储,支持分布式存储
查询语言无查询语言,主要通过 Shell (scan和get)或编程接口(如 Java API)操作HiveQL(类似 SQL 的查询语言),支持简单的 SQL 操作无查询语言,命令操作(如 GET, SET, HGET丰富的查询语言,支持 JSON 格式的复杂查询
事务支持不支持事务,提供最终一致性不支持事务,数据主要用于批量查询支持简单事务(MULTI/EXEC),5.0+ 支持 Lua 脚本事务支持多文档事务
扩展性高扩展性,支持 PB 级数据,适合大规模分布式集群高扩展性,依赖 Hadoop 的分布式架构高扩展性,支持主从复制和分布式分片高扩展性,支持分片和复制集
性能写性能高,读性能较慢,适合实时写入大规模稀疏数据查询速度慢,依赖 Hadoop 集群执行,适合离线批量查询极高的读写性能(内存操作),适合实时请求场景性能较高,适合多样化的数据存储和查询
适用场景实时写入和查询大规模稀疏表,如 IoT 数据、时间序列数据大规模数据的批量分析,如数据仓库、报表生成高速缓存、会话管理、实时计数、排行榜等应用程序数据库、文档存储、复杂查询场景
数据一致性提供最终一致性依赖底层 HDFS 的容错性,最终一致性单机模式强一致性,分布式模式支持最终一致性强一致性,支持多文档事务
索引机制不支持二级索引,查询需按行键检索依赖分区、桶和 HDFS 的 MapReduce 索引机制数据类型内置索引(如有序集合),但无复杂索引支持单字段索引、复合索引、地理空间索引等
编程接口提供 Java、Python、Thrift 等多种 API,适合与应用程序集成提供 JDBC/ODBC 接口,适合与 BI 工具和数据分析工具集成提供多语言客户端库(Python、Java、Node.js 等),简单易用提供多语言客户端(Python、Java、Node.js 等),支持复杂的查询语法
集群模式支持分布式集群部署,分布式读写性能高Hadoop 环境下支持集群部署主从复制、分布式分片,支持高可用和负载均衡支持分片集群和复制集模式,适合高并发和高可用场景
持久化机制数据存储在 HDFS 上,依赖 HDFS 的容错机制通过 HDFS 持久化支持 RDB 快照和 AOF 持久化持久化数据到磁盘,支持定期备份和恢复
开发难度操作复杂度高,学习曲线陡峭,需要深入理解 HDFS 和 MapReduce 的工作原理接近传统 SQL,适合有 SQL 基础的开发者简单易用,入门门槛低,适合轻量级数据管理易用性较高,灵活性强,适合需要快速开发的场景
高可用支持支持 HBase Master 和 RegionServer 的容错和自动恢复高可用性依赖 Hadoop 的容错机制主从复制和哨兵模式,支持快速故障转移支持复制集机制,实现高可用性
典型应用大数据实时存储与分析:物联网、日志存储、金融流水数据数据仓库与离线分析:ETL、报表生成、用户行为分析实时缓存:Web 应用、实时统计、消息队列、限流灵活应用场景:内容管理系统、用户画像、移动应用数据库
开源与维护开源项目,Apache 基金会维护,活跃度高开源项目,Apache 基金会维护,广泛应用于大数据处理开源项目,Redis Labs 维护,社区活跃开源项目,MongoDB Inc. 维护,商业支持和社区支持丰富

选择建议

使用场景推荐数据库
实时写入和随机读取大规模稀疏数据HBase
离线批量处理和数据分析Hive
高并发实时缓存或会话管理Redis
灵活存储和复杂查询场景MongoDB

http://www.kler.cn/a/446993.html

相关文章:

  • [创业之路-202]:任正非管理华为的思想与毛泽东管理党、军队、国家的思想的相似性与差异性
  • Tomcat部署war包项目解决404问题
  • 呼入机器人:24小时客户服务的未来趋势
  • 搜索召回概要
  • 通过阿里云 Milvus 与 PAI 搭建高效的检索增强对话系统
  • MyBatis入门的详细应用实例
  • C语言的函数指针
  • linux-----文件命令
  • Latex 转换为 Word(使用GrindEQ )(英文转中文,毕业论文)
  • AdminJS - 集成 MySQL 的现代化管理面板开发指南
  • CSS3 实现火焰-小火苗效果
  • linux中大内核锁、互斥锁、信号量、完成变量、自旋锁区别
  • 【AIGC-ChatGPT进阶提示词-《动图生成》】怪物工厂:融合想象力与创造力的奇幻世界
  • vscode 使用说明
  • 四川托普信息技术职业学院教案1
  • 智能挂号系统设计典范:SSM 结合 Vue 在医院的应用实现
  • Windows下安装Rabbit MQ
  • 【线性代数】理解矩阵乘法的意义(点乘)
  • 安装Mac软件遇到问题常见报错
  • 机器学习-逻辑回归和softmax回归
  • go语言zero框架中启动脚本.sh的编写与配置
  • go语言 爬虫 钉钉群机器人
  • 玩游戏没有flash插件的解决方案(No Flash)
  • 【RAII | 设计模式】C++智能指针,内存管理与设计模式
  • 音视频入门基础:MPEG2-TS专题(21)——FFmpeg源码中,获取TS流的视频信息的实现
  • python学习笔记—9—复习