HBase、Hive、Redis 和 MongoDB的对比

news2024/12/19 9:48:25

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.coloradmin.cn/o/2262083.html

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

相关文章

解锁 draw.io 流程图制作工具的强大功能与应用(1/2)

一、draw.io 简介 &#xff08;一&#xff09;基本概述 draw.io 是一款由 JGraph 公司开发的基于网页的在线图表绘制工具。它最大的优势之一就是无需进行繁琐的下载和安装步骤&#xff0c;只要打开浏览器&#xff0c;访问其官网&#xff0c;就能立即开始使用。无论是在 Window…

数据结构与算法:稀疏数组

前言 此文以整型元素的二维数组为例&#xff0c;阐述稀疏数组的思想。其他类型或许有更适合压缩算法或者其他结构的稀疏数组&#xff0c;此文暂不扩展。 稀疏数组的定义 在一个二维数据数组里&#xff0c;由于大量的元素的值为同一个值&#xff0c;比如 0或者其他已知的默认值…

【物联网技术与应用】实验4:继电器实验

实验4 继电器实验 【实验介绍】 继电器是一种用于响应施加的输入信号而在两个或多个点或设备之间提供连接的设备。换句话说&#xff0c;继电器提供了控制器和设备之间的隔离&#xff0c;因为设备可以在AC和DC上工作。但是&#xff0c;他们从微控制器接收信号&#xff0c;因此…

RV1126平台下的MobileSeg量化指南:高效部署低算力硬件

1 引言 MobileSeg系列模型采用编解码架构&#xff0c;并以轻量级模型作为骨干网络&#xff0c;专为低算力硬件&#xff08;如BPU、NPU、ARM CPU等&#xff09;设计。这使得MobileSeg在边缘设备和移动端应用中表现出色&#xff0c;具备高效能和灵活性。本文将以MobileSeg分割模…

随手记:小程序兼容后台的wangEditor富文本配置链接

场景&#xff1a; 在后台配置wangEditor富文本&#xff0c;可以文字配置链接&#xff0c;图片配置链接&#xff0c;产生的json格式为&#xff1a; 例子&#xff1a; <h1><a href"https://uniapp.dcloud.net.cn/" target"_blank"><span sty…

RabbitMQ的核心组件有哪些?

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ的核心组件有哪些&#xff1f;】面试题。希望对大家有帮助&#xff1b; RabbitMQ的核心组件有哪些&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RabbitMQ是一个开源的消息代理&#xff08;Messag…

html基础-认识html

1.什么是html html是浏览器可以识别的的标记语言&#xff0c;我们在浏览器浏览的网页就是一个个的html文档 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>认识html</title> </head> <body><h1…

电子应用设计方案-59:智能电动床系统方案设计

智能电动床系统方案设计 一、引言 智能电动床作为一种高端家居产品&#xff0c;旨在为用户提供更加舒适、便捷和个性化的睡眠体验。本方案将详细介绍智能电动床系统的设计架构、功能特点和技术实现。 二、系统概述 1. 系统目标 - 实现床体的多部位电动调节&#xff0c;满足不…

【半导体二极管】

半导体二极管 半导体二极管是由两种不同类型的半导体材料&#xff08;N型和P型&#xff09;通过特定工艺结合而成的电子元器件。其基本结构为PN结。二极管的主要功能是控制电流的单向流动&#xff0c;即允许电流仅在一个方向流动&#xff0c;在反向电压作用下几乎不导电。 1.…

SpringBoot 新特性

优质博文&#xff1a;IT-BLOG-CN 2.1.0新特性最低支持jdk8,支持tomcat9 对响应式编程的支持&#xff0c;spring-boot-starter-webflux starter POM可以快速开始使用Spring WebFlux&#xff0c;它由嵌入式Netty服务器支持 1.5.8 2.1.0/2.7.0/3.0.0 Configuration propertie…

企业车辆管理系统(源码+数据库+报告)

一、项目介绍 352.基于SpringBoot的企业车辆管理系统&#xff0c;系统包含两种角色&#xff1a;管理员、用户,系统分为前台和后台两大模块 二、项目技术 编程语言&#xff1a;Java 数据库&#xff1a;MySQL 项目管理工具&#xff1a;Maven 前端技术&#xff1a;Vue 后端技术&a…

【Redis篇】Set和Zset 有序集合基本使用

目录 Set 基本命令 sadd SMEMBERS SISMEMBER SCARD 返回值&#xff1a; SPOP SMOVE SREM 集合间操作 交集&#xff1a; 并集&#xff1a; 差集&#xff1a; ​编辑 内部编码 使用场景&#xff1a; Zset 有序集合 Zset基本命令 ZADD ZCARD ZCOUNT ZRANGE …

ASRPRO学习笔记一之语音模型位置和语音替换

一、语音替换的步骤 1、扬声器录音 打开GoldWave,点击工具栏中的蓝色控制属性按钮&#xff0c;点击设备&#xff0c;选择扬声器&#xff0c;点击ok。打开电脑上的网易云音乐&#xff0c;点击红色的录制按钮&#xff0c;开始录制音乐&#xff0c;在网易云音乐上点击播放音乐,录…

2.12.顺序表和链表的比较

一.逻辑结构&#xff1a; 二.物理结构/存储结构&#xff1a; 1.顺序表&#xff1a; 优点&#xff1a;顺序表采用顺序存储的方式实现了线性表&#xff0c;由于采取了顺序存储&#xff0c;而且各个数据元素的内存大小相等&#xff0c;因此只需要知道该顺序表的起始地址即可立即找…

OSLC助力系统工程的全生命周期整合 (转)

本文作者胡振超&#xff0c;上海交通大学博士研究生。课题牵头人为鲁金直&#xff0c;瑞典皇家理工学院博士。本项目有Ericsson.SE高级顾问顾文卿&#xff0c;中科蜂巢相关工程师相关工程师所提供的基于多架构建模Karma语言的自主多架构建模工具MetaGraph、OSLC数据整合工具Dat…

electron打包linux环境

注意:新版的electron已经不支持在win上直接打包Linux的环境了,服务会卡住,会一直生成文件占用磁盘(我发现的时候占了我100G&#xff0c;而且文件夹很深&#xff0c;找了java代码while循环&#xff0c;好不容易删除的o(╥﹏╥)o) electron有一个专门打包的docker镜像&#xff0c…

活动预告|云原生创新论坛:知乎携手 AutoMQ、OceanBase、快猫星云的实践分享

近年来&#xff0c;云原生技术迅猛发展&#xff0c;成为企业数字化转型的关键动力&#xff0c;云原生不仅极大地提升了系统的灵活性和可扩展性&#xff0c;还为企业带来了前所未有的创新机遇。 12 月 28 日 知乎携手 AutoMQ、OceanBase 和快猫星云推出“云原生创新论坛”主题的…

AMS1117芯片驱动电路·降压芯片的驱动电路详解

编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 AMS1117驱动电路 很常用的一种LDO降压芯片&#xff0c;LDO(Low Dropout Regulator)降压芯片是线性稳压器&#xff0c;这种IC因为内部集成的不是开关电路&#xff0c;只能将输入与输出的电压差值通过内部…

[论文阅读]Universal and transferable adversarial attacks on aligned language models

Universal and transferable adversarial attacks on aligned language models http://arxiv.org/abs/2307.15043 图 1&#xff1a;Aligned LLMs 不是对抗性 Aligned。我们的攻击构建了一个单一的对抗性提示&#xff0c;该提示始终绕过最先进的商业模式&#xff08;包括 ChatG…

【HarmonyOS之旅】HarmonyOS开发基础知识(一)

目录 1 -> 应用基础知识 1.1 -> 用户应用程序 1.2 -> 用户应用程序包结构 1.3 -> Ability 1.4 -> 库文件 1.5 -> 资源文件 1.6 -> 配置文件 1.7 -> pack.info 1.8 -> HAR 2 -> 配置文件简介 2.1 -> 配置文件的组成 3 -> 配置文…