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

hbase查询性对比 mysql_按照id查询,mysql、es、hbase三个哪个更快?

反正常用的硬盘的储存结构翻来翻去也就是在B树上折腾,或者说利用数据的排序性质做折腾

我们把索引的排序+写入的数据的排序拆开来看,做排列组合

主键索引将索引字段排序写入+数据按主键id排序写入=MySQL InnoDB引擎

索引排序写入+数据不排序写入=MySQL MyISAM引擎上建立索引

下面在普及下NoSQL里的LSM Tree

LSM Tree相当于多颗b树一起组成一颗树

主键索引将索引字段排序写入+数据按主键id排序写入+LSM=Hbase/Cassandra

索引排序写入+LSM+数据根据offset读取写入=Mongo

ES没研究过,不过索引上肯定也是LSM树

然后以下是我做的一个benchmark

可以看出两个已排序的树的Join的开销其实很低,那么只要在LSM Tree下的每颗B树上带上一个时间戳,那么通过多棵树的Join+时间戳新的数据覆盖时间戳旧的数据,然后保证每颗B树不可变,要变也是通过MergeJoin的方式将两颗B树合并成一颗更大的B树,然后内存里面维护一颗可变的排序树,当这颗树到达一个阈值时(一般32M),直接刷入硬盘,这样就能做到每次insert只读取内存里的数据,不读取硬盘上的数据,从而达到只要NoSQL的可变树缓存没击穿,CPU没到100%,配合索引字段的分区写入多集群,写入性能就没有瓶颈的效果,相应的,这样来说读取的时候有几棵树就要读取几次,其中读取每颗B树的性能可以视作和MySQL读取B树的性能一致,其他的性能差距就是在缓存策略上的差距罢了,配合合理的设计和参数调整能够规避很多问题

然后是针对某个id查询的问题,一般来说NoSQL会取你的RowKey做布隆过滤器,能够筛掉很大一部分的没有此id的B树不去读取,这种情况查询id性能和MySQL差不多,但是如果这个id是在长时间一直update的,那么布隆过滤器有和没有是一样的了,有几个B树包含了此id就慢几倍

所以可以这么看

HBase这种是按范围读写+MySQL写入能力跟不上时使用的数据库

ES可以看作采用了HBase类似的储存结构,但是自动帮你从文本中提取出索引字段的数据库,省了你自己维护全文索引的各种坑,硬要当HBase那样用估计也可以,但是人家不是为这种情景做设计的,估计有或多或少的设计上根本不会去想的坑在里面,比如一致性,可用性之类的问题,真要用前提是有人帮你踩过坑,否则还是老老实实用HBase

MySQL这种是你写入完全不是什么问题的时候,读多于写,要并发,要事务,要灵活,要快速开发,要容易运维,关系型数据库完爆NoSQL

相关文章:

  • react 动态修改路由_关于React动态加载路由处理的相关问题
  • C#中值和引用
  • pythonrestapicctv_使用pythonrestapi在JIRA中创建问题和自定义字段
  • 第1章 基础语法
  • 苹果动态壁纸库怎么增加_苹果xr如何添加动态壁纸设置
  • 【Selenium-WebDriver问题点】driver和浏览器版本之间的兼容性问题
  • 知识图谱标准化白皮书_知识图谱标准化白皮书正式发布
  • 数据库系统工程师5天修炼_中级|通信工程师每日一练|3.4
  • windows下redis配置密码
  • netlink怎么读_如何使用VB访问NETLINK并读写S7300 PLC数据
  • vue点击单个图片放大
  • python如何安装tushare_Python tusharec包_程序模块 - PyPI - Python中文网
  • java实现ssl单/双向认证通信[推荐]
  • js添加多个子节点_JavaScript-js 动态创建多个元素如何避免多次追加到节点的操作?...
  • [BZOJ 1040] 骑士
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • C++类中的特殊成员函数
  • express.js的介绍及使用
  • log4j2输出到kafka
  • vue总结
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 那些被忽略的 JavaScript 数组方法细节
  • 双管齐下,VMware的容器新战略
  • 无服务器化是企业 IT 架构的未来吗?
  • 异步
  • #FPGA(基础知识)
  • #图像处理
  • #预处理和函数的对比以及条件编译
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (31)对象的克隆
  • (js)循环条件满足时终止循环
  • (NSDate) 时间 (time )比较
  • (差分)胡桃爱原石
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (转)visual stdio 书签功能介绍
  • .axf 转化 .bin文件 的方法
  • .cn根服务器被攻击之后
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .net 反编译_.net反编译的相关问题
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET/C# 使用反射注册事件
  • .NetCore部署微服务(二)
  • .NET实现之(自动更新)
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @Service注解让spring找到你的Service bean
  • [<MySQL优化总结>]
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [BZOJ2208][Jsoi2010]连通数
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配
  • [C++随笔录] 红黑树
  • [CC-FNCS]Chef and Churu
  • [codeforces] 25E Test || hash
  • [Docker]十.Docker Swarm讲解