加入收藏 | 设为首页 | 会员中心 | 我要投稿 南通站长网 (https://www.0513zz.cn/)- 专有云、图像技术、经验、数据治理、专属主机!
当前位置: 首页 > 站长资讯 > 评论 > 正文

NBN完成5G毫米波远程传输实验

发布时间:2021-01-28 16:28:12 所属栏目:评论 来源:互联网
导读:读取速度快是因为它使用了LSM树型结构,因为磁盘寻址耗时远远大于磁盘顺序读取的时间,HBase的架构设计导致我们可以将磁盘寻址次数控制在性能允许范围内。 LSM 树原理把一棵大树拆分成N棵小树,它首先写入内存中,随着小树越来越大,内存中的小树会flush到磁

读取速度快是因为它使用了LSM树型结构,因为磁盘寻址耗时远远大于磁盘顺序读取的时间,HBase的架构设计导致我们可以将磁盘寻址次数控制在性能允许范围内。

LSM 树原理把一棵大树拆分成N棵小树,它首先写入内存中,随着小树越来越大,内存中的小树会flush到磁盘中,磁盘中的树定期可以做merge操作来合并成一棵大树,以优化读性能。

4.3.1查询举例

  1. 根据RowKey能快速找到行所在的Region,假设有10亿条记录,占空间1TB。分列成了500个Region,那读取2G的记录,就能找到对应记录。
  2. 数据是按照列族存储的,假设分为3个列族,每个列族就是666M, 如果要查询的东西在其中1个列族上,1个列族包含1个或者多个 HStoreFile,假设一个HStoreFile是128M, 该列族包含5个HStoreFile在磁盘上. 剩下的在内存中。
  3. 内存跟磁盘中数据是排好序的,你要的记录有可能在最前面,也有可能在最后面,假设在中间,我们只需遍历2.5个HStoreFile共300M。
  4. 每个HStoreFile(HFile的封装),是以键值对(KV)方式存储,只要遍历一个个数据块中的key的位置,并判断符合条件可以了。一般key是有限的长度,假设KV比是1:19,最终只需要15M就可获取的对应的记录,按照磁盘的访问100M/S,只需0.15秒。加上Block Cache 会取得更高的效率。
  5. 大致理解读写思路后你会发现如果你在读写时设计的足够巧妙当然读写速度快的很咯。

5 HBase Flush

5.1 Flush

对于用户来说数据写到 MemStore 中就算OK,但对于底层代码来说只有数据刷到硬盘中才算彻底搞定了!因为数据是要写入到WAL(Hlog)中再写入到MemStore中的,flush有如下几个时机。

  1. 当 WAL 文件的数量超过设定值时 Region 会按照时间顺序依次进行刷写,直到 WAL 文件数量小于设定值。
  2. 当Region Server 中 MemStore 的总大小达到堆内存40%时,Region 会按照其所有 MemStore 的大小顺序(由大到小)依次进行阻塞刷写。直到Region Server中所有 MemStore 的总大小减小到上述值以下。当阻塞刷写到上个参数的0.95倍时,客户端可以继续写。
  3. 当某个 MemStore 的大小达到了128M时,其所在 Region 的所有 MemStore 都会阻塞刷写。
  4. 到达自动刷写的时间也会触发 MemStore 的 flush。自动刷新的时间间隔默认1小时。

5.2 StoreFile Compaction

由于 MemStore 每次刷写都会生成一个新的 HFile,且同一个字段的不同版本(timestamp) 和不同类型(Put/Delete)有可能会分布在不同的 HFile 中,因此查询时需要遍历所有的 HFile。为了减少 HFile 的个数跟清理掉过期和删除的数据,会进行 StoreFile Compaction。

Compaction 分为两种,分别是 Minor Compaction 和 Major Compaction。

  1. Minor Compaction会将临近的若干个较小的 HFile 合并成一个较大的 HFile,但不会清理过期和删除的数据。
  2. Major Compaction 会将一个 Store 下的所有的 HFile 合并成一个大 HFile,并且会清理掉过期和删除的数据。

今天天气不错,我们来分享一个能让你技术获得增强的主题: 开发中间件。

很多同学听到这个主题,可能会说我们是小公司,没有机会开发中间件。

那你就错了,我们这里说的中间件,并不一定是那些如dubbo之类很牛逼的开源组件,而是,你们公司内部自己使用的公共组件。

首先,我们要刻意培养这方面的能力,其次,我们要掌握一定的套路来快速地开发一款健壮的公共组件。

下面,我们就从这两个方面分享一下我的心得。

我举个例子,有的公司可能就只有一个大的单体应用,有的公司可能有很多小项目,有的公司可能是很牛逼的微服务,这些项目无疑来说都是完全不同的,但是,他们肯定也有一些共同点,比如,他们都需要打印日志,所以,你是不是可以把日志这么一个非常简单的东西拿出来做成一个日志框架呢?

日志这个东西看似比较简单,你们公司可能用的还是spring自己启动时候的日志,但是,它其实也有很多可能性,或者说可变性,比如,日志切分,滚动日志,异步打印日志,打印到远程,聚合日志,日志脱敏显示(手机号不显示全),日志可追踪,等等,你看看,我就随便说说,就能说出这么多日志相关的内容,所以,它是很适合做成公共组件的嘛。

这样,公司一旦有新的规范需要修改日志的时候,就只需要修改这个公共组件就可以了,所有项目升级个jar包就完事了,节省了大量的工时,同时,别人依赖你,你的影响力也就提升上去了,你就是你们公司日志这块的专家了,别人遇到问题都得来请教你,是不是很爽。

即使你是单体应用,也应该培养这样的能力,保不准你哪天就走了,这个日志组件是不是可以带到下一家公司,是不是可以让你更快速地搭建新项目,是不是可以让你在新的公司建立影响力。


(编辑:南通站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读