1. 数据库管理
操作 | HBase | Hive | Redis | MongoDB |
---|
创建数据库 | N/A (HBase 没有数据库概念) | CREATE DATABASE db_name; | N/A (Redis 没有数据库命名功能) | use db_name; (自动创建) |
查看数据库 | N/A | SHOW DATABASES; | INFO 查看全局信息 | show dbs; |
删除数据库 | N/A | DROP DATABASE db_name CASCADE; | N/A | db.dropDatabase(); |
切换数据库 | N/A | USE db_name; | SELECT db_index | use db_name; |
2. 表管理
以下是 HBase、Hive、Redis 和 MongoDB 中进行表结构增改操作的总结,具体包括表的增加和修改操作。
操作 | HBase | Hive | Redis | MongoDB |
---|
增加表 | 创建时指定列族 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 value | db.table_name.updateOne() ,
db.table_name.updateMany() |
查看表 | list | SHOW TABLES; | KEYS * 查询所有键 | show collections; |
表结构 | describe 'table_name' | DESCRIBE table_name; 查看详细信息
DESCRIBE table_name; | N/A | db.table_name.stats() |
删除表 | disable 'table_name'
drop 'table_name' | DROP TABLE table_name; | DEL key_name | db.table_name.drop() |
3. 数据操作
插入数据
操作 | HBase | Hive | Redis | MongoDB |
---|
插入单行 | put 'table_name', 'row1', 'cf1:col1', 'value' | INSERT INTO table_name VALUES (...); | 插入键值对字段SET key value 插入哈希表字段 HSET hkey:hvalue key value | db.table_name.insert({...}) |
批量插入 | 使用脚本或 API 插入 | LOAD DATA INPATH 'path' INTO TABLE ...; | MSET key1 value1 key2 value2 | db.table_name.insertMany([{...}]) |
查询数据
操作 | HBase | Hive | Redis | MongoDB |
---|
查询所有数据 | scan 'table_name' | SELECT * FROM table_name; | KEYS * 查询所有键HGETALL hkey:hvalue | db.table_name.find() |
按条件查询 | get 'table_name', 'row1' 查询版本数据get 'my_table', 'row1', {COLUMN => 'cf:column1', VERSIONS => 3} | SELECT * FROM table_name WHERE ...; | GET key | db.table_name.find({...}) |
字段查询 | get 'table_name', 'row1', 'cf1:col1' | SELECT col1 FROM table_name; | HGET hkey:hvalue key value | db.table_name.find({}, {field: 1}) |
更新数据
操作 | HBase | Hive | Redis | MongoDB |
---|
更新单个值 | put 'table_name', 'row1', 'cf1:col1', 'new_value' | UPDATE table_name SET col1 = ... WHERE ...; | SET key new_value | db.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: {...}}) |
删除数据
操作 | HBase | Hive | Redis | MongoDB |
---|
删除单行 | delete 'table_name', 'row1' | DELETE FROM table_name WHERE ...; | DEL key | db.table_name.deleteOne({...}) |
删除某字段 | delete 'table_name', 'row1', 'cf1:col1' | N/A | HDEL hash_key field | db.table_name.update({...}, {$unset: {field: 1}}) |
删除所有数据 | 删除表再重建 | TRUNCATE TABLE table_name; | FLUSHDB | db.table_name.deleteMany({}) |
4. 其他管理操作
操作 | HBase | Hive | Redis | MongoDB |
---|
查看存储状态 | status | 查看 Hadoop 状态,需依赖 HDFS | INFO 查看运行状态 | db.stats() |
备份数据 | 使用快照或导出工具 | 使用 HDFS 导入导出功能 | 保存 RDB/AOF 文件 | 使用 mongodump |
恢复数据 | 使用快照恢复 | 使用 HDFS 数据恢复 | 载入 RDB/AOF 文件 | 使用 mongorestore |
查看日志 | 检查 HBase 日志目录 | 检查 Hadoop 日志 | 查看 Redis 日志文件 | 查看 MongoDB 日志文件 |
启动和关闭操作总结
数据库 | 启动命令 | 关闭命令 | 说明 |
---|
Hadoop | ./sbin/start-dfs.sh 和 start-yarn.sh | ./sbin/stop-dfs.sh 和 stop-yarn.sh | 启动 Hadoop 分布式文件系统(HDFS)和资源调度框架(YARN),其他组件如 Hive/HBase 均依赖它 |
HBase | ./bin/start-hbase.sh | ./bin/stop-hbase.sh | 集群模式下,需确保 Zookeeper 服务已启动;依赖 HDFS 提供存储支持 |
Hive | ./bin/hive 或 hive --service hiveserver2 & | exit | 需先启动 Hadoop 服务,包括 HDFS 和 YARN,Hive 基于 Hadoop 提供 SQL 接口 |
Redis | ./src/redis-server | redis-cli shutdown 或 kill <pid> | 简单高效,适合开发和缓存场景,独立运行,无需依赖其他服务 |
MongoDB | sudo service mongod start 或 mongod --config ... | sudo service mongod stop 或db.shutdownServer() | 默认无密码,生产环境建议配置用户权限和访问限制,独立运行,无需依赖其他服务 |
特点总结
数据库特点对比表
特性/维度 | HBase | Hive | Redis | MongoDB |
---|
数据库类型 | 分布式 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 |