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.rhkb.cn/news/493539.html

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

相关文章

Java图片拼接

最近遇到一个挺离谱的功能&#xff0c;某个表单只让上传一张图&#xff0c;多图上传会使导出失败。跟开发沟通后表示&#xff0c;这个问题处理不了。我... 遂自己思考&#xff0c;能否以曲线救国的方式拯救一下&#xff0c;即不伤及代码之根本&#xff0c;又能解决燃眉之急。灵…

webGL硬核知识:图形渲染管渲染流程,各个阶段对应的API调用方式

一、图形渲染管线基础流程概述 WebGL 的图形渲染管线大致可分为以下几个主要阶段&#xff0c;每个阶段都有其特定的任务&#xff0c;协同工作将 3D 场景中的物体最终转换为屏幕上呈现的 2D 图像&#xff1a; 顶点处理&#xff08;Vertex Processing&#xff09;阶段&#xff1…

大数据面试题--企业面试真题

大数据面试题--企业面试真题 PlanHub 点击访问获取&#xff1a; 大数据面试体系专栏_酷兜科技​www.kudoumh.top/hlwai/85.html 点击访问获取&#xff1a; 大数据面试体系专栏_酷兜科技​www.kudoumh.top/hlwai/85.html 大数据面试题汇总 HDFS 1、 HDFS 读写流程。 2、HDF…

lambda初探(一)

发生捕获时&#xff0c;拿到x,y的值 退出lambda表达式后&#xff0c;foo外层的值不变化。foo内部的x&#xff0c;值是持续的&#xff0c;像static。即使退出foo函数后&#xff0c;值的状态依然保持。 外层x的值变化&#xff0c;并不影响foo内部。 foo运行了两次&#xff0c;内…

【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;四&#…

基于Spring Boot的智慧农业专家远程指导系统

一、系统背景与意义 随着科技的不断进步&#xff0c;农业领域也在积极寻求创新与发展。然而&#xff0c;传统农业生产中农民往往依靠经验进行种植和养殖&#xff0c;缺乏科学的指导和技术支持。同时&#xff0c;农业专家资源有限&#xff0c;难以覆盖广大的农村地区&#xff0…

【JavaEE初阶】线程 和 thread

本节⽬标 认识多线程 掌握多线程程序的编写 掌握多线程的状态 一. 认识线程&#xff08;Thread&#xff09; 1概念 1) 线程是什么 ⼀个线程就是⼀个 "执⾏流". 每个线程之间都可以按照顺序执⾏⾃⼰的代码. 多个线程之间 "同时" 执⾏着多份代码. 还…

练习题 最小栈

最小栈 最小栈 class MinStack {private Stack<Integer> stack;private Stack<Integer> minstack;public MinStack() {stacknew Stack<>();minstacknew Stack<>();}public void push(int val) {stack.push(val);if(minstack.empty()){minstack.push(…

全志H618 Android12修改doucmentsui鼠标单击图片、文件夹选中区域

背景: 由于当前的文件管理器在我们的产品定义当中,某些界面有改动的需求,所以需要在Android12 rom中进行定制以符合当前产品定义。 需求: 在进入File文件管理器后,鼠标左击整个图片、整个文件夹可以选中该类型,进行操作,故代码分析以及客制化如下: 主要涉及的代码:…

堆【Lecode_HOT100】

文章目录 1.数组中的第&#xff2b;个最大元素No.2152.前K个高频元素347 1.数组中的第&#xff2b;个最大元素No.215 方法一&#xff1a;NlogN不能满足时间复杂度的要求 public int findKthLargest(int[] nums, int k) {Arrays.sort(nums);return nums[nums.length-k];}方法二&…

Android 搭建AIDL Client和Server端,双向通信

一、背景 使用AIDL,搭建Client和Server端,实现跨进程通讯,即两个应用之间可以相互通讯。这里列举AIDL实现的方式和需注意的细节&#xff0c;并附上源码。 二、实现方式 2.1 定义AIDL需要的接口,名字为xxx.aidl,Client和Server端 AIDL接口的包名和aidl文件必须一致&#xff0c…

HIPT论文阅读

题目《Scaling Vision Transformers to Gigapixel Images via Hierarchical Self-Supervised Learning》 论文地址&#xff1a;[2206.02647] Scaling Vision Transformers to Gigapixel Images via Hierarchical Self-Supervised Learning 项目地址&#xff1a;mahmoodlab/HI…

[ESP]从零开始的Arduino IDE安装与ESP环境配置教程

一、前言 最近也是在比赛方面比较忙&#xff0c;没有更多的时间和精力去更新长文章了。这几周都更倾向于环境搭建的教程&#xff0c;这类教程写起来确实方便&#xff0c;也不怎么费时间&#xff0c;一个下午基本可以搞定&#xff0c;哈哈&#xff0c;我保证不是在为自己想摆烂找…

投标心态:如何在“标海战术”中保持清醒的头脑?

在竞争激烈的市场环境下&#xff0c;“标海战术”——即大规模参与投标——已经成为许多企业争取市场份额的重要策略。然而&#xff0c;盲目追求投标数量可能导致资源浪费、团队疲劳以及战略目标的模糊化。在这种高强度的竞争模式中&#xff0c;如何保持清醒的头脑&#xff0c;…

wxWidgets使用wxStyledTextCtrl(Scintilla编辑器)的正确姿势

开发CuteMySQL/CuteSqlite开源客户端的时候&#xff0c;需要使用Scintilla编辑器&#xff0c;来高亮显示SQL语句&#xff0c;作为C/C领域最成熟稳定又小巧的开源编辑器&#xff0c;Scintilla提供了强大的功能&#xff0c;wxWidgets对Scintilla进行包装后的是控件类&#xff1a;…

【原生js案例】让你的移动页面实现自定义的上拉加载和下拉刷新

目前很多前端UI都是自带有上拉加载和下拉刷新功能,按照官网配置去实现即可,比如原生小程序,vantUI等UI框架,都替我们实现了内部功能。 那如何自己来实现一个上拉加载和下拉刷新的功能? 实现效果 不用浏览器的css滚动条,自定义实现滚动效果 自定义实现滚动,添加上拉加载…

批处理理解

初识批处理 如何批处理&#xff1a; 命名&#xff1a;.bat 方法&#xff1a;创建一个记事本文件&#xff0c;然后将其扩展改为.bat 批处理作用&#xff1a;自上而下成批处理每一条DOS命令&#xff0c;直到执行到最后一条。运行环境&#xff1a;当然是我们cmd了 回归我学过的…

APM32F411使用IIS外设驱动es8388实现自录自播

前言&#xff1a; 从零开始学习I2s外设&#xff0c;配置Es8288寄存器实现录音播放。本文章使用主控芯片是APM32F411系类。音频相关的概念比较多&#xff0c;就不再次做过多的介绍&#xff0c;本文章只是简单实现边录边播功能。APM系类兼容st的芯片&#xff0c;所以用st的hal库来…

OB删除1.5亿数据耗费2小时

目录 回顾&#xff1a;mysql是怎么删除数据的&#xff1f; 删除方案 代码实现 执行结果 结论 本篇是实际操作 批量处理数据以及线程池线程数设置 记录学习 背景&#xff1a;有一张用户标签表&#xff0c;存储数据量达4个亿&#xff0c;使用OceanBase存储&#xff0c;由于…

20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕

20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕 2024/12/17 17:21 缘起&#xff0c;最近需要识别法国电影《地下铁》的法语字幕&#xff0c;使用 字幕小工具V1.2【whisper套壳/GUI封装了】 无效。 那就是直接使用最原始的whisper来干了。 当你重装WIN10的时候&#…