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.mzph.cn/bicheng/64759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sigrity System Explorer Snip Via Pattern From Layout模式从其它设计中截取过孔模型和仿真分析操作指导

Sigrity System Explorer Snip Via Pattern From Layout模式从其它设计中截取过孔模型和仿真分析操作指导 Sigrity System Explorer Snip Via Pattern From Layout模式支持从其它设计中截取过孔模型用于仿真分析,同样以差分模板为例 具体操作如下 双击打开System Explorer软件…

2024年度个人总结

一转眼已经2024年度最后一个月了&#xff0c;今年基本没有在CSDN发布内容&#xff0c;包括其他平台&#xff08;B站&#xff09;&#xff0c;倒是在其他地方&#xff08;我的个人网站和V2EX&#xff09;发布一些零碎的东西&#xff0c;主要是因为今年换了工作后太累了&#xff…

汽车IVI中控开发入门及进阶(42):OpenVG

概览: OpenVG是一个无版权、跨平台的API,它为高级用户界面和矢量图形库(如SVG)提供了一个低级硬件加速接口。OpenVG主要针对需要便携式加速高质量矢量图形以获得引人注目的用户界面和文本的消费电子产品、手持设备、可穿戴设备和汽车设备,同时使硬件加速能够在非常低的功…

基于微信小程序的消防隐患在线举报系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

如何重新设置VSCode的密钥环密码?

故障现象&#xff1a; 忘记了Vscode的这个密码&#xff1a; Enter password to unlock An application wants access to the keyring “Default ke... Password: The unlock password was incorrect Cancel Unlock 解决办法&#xff1a; 1.任意terminal下&#xff0c;输入如下…

springcloud-gateway获取应用响应信息乱码

客户端通过springcloud gateway跳转访问tongweb上的应用&#xff0c;接口响应信息乱码。使用postman直接访问tongweb上的应用&#xff0c;响应信息显示正常。 用户gateway中自定义了实现GlobalFilter的Filter类&#xff0c;在该类中获取了上游应用接口的响应信息&#xff0c;直…

JS萤石云录像回放拖动进度条无法正常播放

问题描述&#xff1a; 本项目版本&#xff1a;vue2.6.12&#xff0c;webpack3.6.0&#xff0c;ezuikit-js0.7.2 在使用萤石云的JavaScript SDK做监控的直播、录像回放时&#xff0c;遇到部分设备的录像回放&#xff0c;无法根据控制面板的拖动进度条查看某时间段的录像。 官方…

2024.12.21辩论赛感受

背景 今天辩论赛的双方论点是&#xff1a; 正方&#xff1a;寒假留在研发中心的收获大 反方&#xff1a;寒假去做其他事情的收获 辩论赛&#xff0c;为了锻炼自己&#xff0c;选择了不想选择以及相对不好辩论的反方。出现的状况有一下几点&#xff1a; 1.发现自己脑子完全跟不…

混元大模型简介及个人运行方案

一、混元大模型简介 混元大模型&#xff08;HunyuanVideo&#xff09;是一个开源的视频生成基础模型&#xff0c;专为高质量的视频生成任务设计。它融合了多项先进技术和创新架构&#xff0c;在视觉质量、多样性、文本与视频的对齐度&#xff0c;以及生成的稳定性方面表现出色…

图漾相机-ROS1_SDK_ubuntu版本编译(新版本)

文章目录 官网编译文档链接官网SDK下载链接1、下载 Camport ROS1 SDK1.下载git2、下载链接 2、准备编译工作1、安装 catkin2、配置环境变量3. 将Camport3中的linux库文件拷贝到 user/lib目录下4、修改lunch文件制定相机&#xff08;可以放在最后可以参考在线文档&#xff09;**…

基于Redis的网关鉴权方案与性能优化

文章目录 前言一、微服务鉴权1.1 前端权限检查1.2 后端权限检查1.3 优缺点 二、网关鉴权2.1 接口权限存储至Redis2.2 网关鉴权做匹配 总结 前言 在微服务架构中&#xff0c;如何通过网关鉴权结合Redis缓存提升权限控制的效率与性能。首先&#xff0c;文章对比了两种常见的权限…

leetcode-283.移动零-day13

方法一&#xff1a;双指针遇 0 交换 1. 基本思路回顾 该方法使用了两个指针m和i&#xff0c;m用于标记当前已经处理好的非零元素应该放置的位置&#xff0c;i用于遍历整个数组。当遇到nums[m]为0时&#xff0c;会通过内层while循环找到下一个非零元素&#xff08;如果存在的话…

【Python入门】Python控制成分

文章一览 一 、顺序结构二、分支结构多分支结构 三、循环结构1. for语句循环结构range&#xff08;&#xff09;函数 2. while语句构成循环1&#xff09;while 循环流程 3、for 循环和 while 循环的区别4、for 循环和 while 循环效率比较 四、函数1、函数定义1) 内置函数2) 非内…

scala中模式匹配的应用

package test34object test6 {case class Person(name:String)case class Student(name:String, className:String)// match case 能根据 类名和属性的信息&#xff0c;匹配到对应的类// 注意&#xff1a;// 1 匹配的时候&#xff0c;case class的属性个数要对上// 2 属性名不需…

【D3.js in Action 3 精译_046】DIY 实战:在 Observable 平台利用饼图布局函数实现 D3 多个环形图的绘制

当前内容所在位置&#xff1a; 第五章 饼图布局与堆叠布局 ✔️ 5.1 饼图和环形图的创建 ✔️ 5.1.1 准备阶段&#xff08;一&#xff09;5.1.2 饼图布局生成器&#xff08;二&#xff09;5.1.3 圆弧的绘制&#xff08;三&#xff09;5.1.4 数据标签的添加&#xff08;四&#…

IP地址查询的背后②:IP地址(IPv4)的构成、类型以及子网划分

自从各大平台将IP地址显示之后&#xff0c;相信广大网友对于IP地址相当不陌生了。而我们见到的IP地址往往只会显示在某市&#xff0c;更仔细的会看到有一段段字节所显示的字符串&#xff0c;而IP地址看似由很简单的1-255之间的数字所组成的四个部分&#xff0c;但其实质上则是二…

使用 DeepSpeed 微调 OPT 基础语言模型

文章目录 OPT 基础语言模型Using OPT with DeepSpeedmain.py 解析1、导入库和模块2、解析命令行参数3、main 函数3.1 设备与分布式初始化3.2 模型与数据准备3.3 定义评估函数3.4 优化器与学习率调度器设置3.5 使用 deepspeed 进行模型等初始化3.6 训练循环3.7 模型保存 4、dsch…

计算机网络-GRE Over IPSec实验

一、概述 前情回顾&#xff1a;上次基于IPsec VPN的主模式进行了基础实验&#xff0c;但是很多高级特性没有涉及&#xff0c;如ike v2、不同传输模式、DPD检测、路由方式引入路由、野蛮模式等等&#xff0c;以后继续学习吧。 前面我们已经学习了GRE可以基于隧道口实现分支互联&…

使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动

使用Turtle库实现&#xff0c;鼠标左键绘制路径&#xff0c;用鼠标右键结束绘制&#xff0c;小海龟并沿路径移动 Turtle库是Python标准库的一部分&#xff0c;它提供了一种基于命令的图形绘制方式。Turtle模块通过一个“海龟”&#xff08;Turtle&#xff09;对象在屏幕上移动…

《计算机组成及汇编语言原理》阅读笔记:p9-p27

《计算机组成及汇编语言原理》学习第 2 天&#xff0c;p9-p27 总结&#xff0c;总计 19 页。 一、技术总结 1.quantum physics(量子物理学) (1)quantum(量子) quantum的本意是&#xff1a;c. the smallest amount of sth(量子)。 In physics, a quantum is the minimum am…