首页 文章 精选 留言 我的

精选列表

搜索[Table组件],共10000篇文章
优秀的个人博客,低调大师

读书笔记-HBase in Action-第二部分Advanced concepts-(1)HBase table design

本章以山寨版Twitter为例介绍HBase Schema设计模式。广义的HBase Schema设计不仅仅包含创建表时指定项,还应该综合考虑Column families/Column qualifier/Cell value/Versions/Rowkey等相关内容。 灵活的Schema&简单的存储视图 Schema设计和数据存储及訪问模式关系密切,先回想下HBase数据模型。有几个要点: 被索引的部分包含Row Key+Col Fam+Col Qual+Time Stamp 因为HBase的Schema-Less和列式存储特性,列无需在表创建时定义好,能够动态加入。 并且列名也存储在HFile中。用它来保存数据和用Cell value没有什么不同。 循序渐进实战 Schema设计的首要切入点是为待解决的问题建模。下文从逐步完好Twitter用户关系表的过程中总结相关设计原则。 用户关系表follows要回答的问题包含: A用户关注哪些用户? A用户是否关注B用户? 谁关注了A用户? 最初版设计例如以下,以用户为rowkey。follows列族中包括多个列,每一个列名为序号。存储的值为关注用户。 最明显的问题有两个: 当用户新增关注时,还须要进行查找当前已关注人。递增序号等逻辑。 查找某个特定关注人效率一般。 改进例如以下,将关注人直接作为列名: 宽表VS窄表 之前的设计为宽表模式,一行记录包括了用户全部关注人。假设使用窄表,Schema例如以下: 窄表设计最大的长处是能通过rowkey查找高效回答之前的问题2:A用户是否关注用户B。而问题1:A用户关注哪些用户,则变成了扫描操作,但从HBase底层列式存储看。I/O读取数据量是一样的(get操作内部实现为针对单行的scan操作)。代码片段例如以下: Scan s = new Scan();s.addFamily(Bytes.toBytes("f")); s.setStartRow(Bytes.toBytes("A")); s.setStopRow(Bytes.toBytes("A"+ 1)); ResultScanner results = followsTable.getScanner(s); 窄表带来的最大问题是。HBase仅仅有单行操作才是原子性的。 如果用户新关注了多个用户,在宽表中能通过一次Put原子操作完毕。而在窄表操作中则须要多次操作。 注:回答问题3。谁关注了A用户,能够再建一张被关注用户表。rowkey为followed+follower。由应用端维护两张表数据一致性。 Rowkey设计 使用Hash rowkey有助于数据在regionserver之间均匀分布,一般能够使用MD5获取定长key。 比較棘手的一个场景是在时间序列数据中,使用时间戳作为rowkey。那么你始终在表底部插入数据,因为rowkey的有序性存储,表的最后一个region成为热点。而应用又须要依据时间范围进行扫描查询,所以不能简单将时间戳Hash,这时能够考虑“Salting”方法: int salt = new Integer(new Long(timestamp).hashCode()).shortValue()% <number of region servers> byte[] rowkey = Bytes.add(Bytes.toBytes(salt)\ + Bytes.toBytes("|") + Bytes.toBytes(timestamp)); 生成的Rowkey例如以下。查询处理变得略微复杂些,须要在应用端合并处理。 0|timestamp1 0|timestamp5 0|timestamp6 1|timestamp2 1|timestamp9 2|timestamp4 2|timestamp8 反规范化 上节中,Rowkey包括了被关注人ID。CQ中存储被关注人名称。而不用再join用户表查询。已经是某种程度的反规范化。 因为HBase列的动态性,能够用单个HBase表使用嵌套列来表达数据库中一对多关系(类似于MongoDB文档模型)。 继续以twitter为例,如果已经有follows和twits表,那么用户登录后,通过follows读取关注人信息,然后从twits表中依据第一步读取的用户ID读取关注人的twits,最后合并取最新结果展如今用户首页。能够考虑添加一张冗余表用来存储用户首页上展示的twits,Rowkey为登录用户+倒序时间戳。存储所关注人的最新twits。 该表提供了更好的读取性能。还能解决一个常见问题:某大V帐号被海量用户关注。如果不使用冗余表。他的twits数据所在的regionserver将成为热点,可能导致性能瓶颈。 该表的数据生成能够通过coprocessor实现(下章介绍,类似于数据库的触发器),数据保留由TTL实现(Time To Live,下节介绍) Column family配置 HBase提供了一些配置參数。在创建表时能够按需定制。 1.HFile block size:和HDFS block size不同。默认大小是64KB。Block索引存储了每一个block的起始key。所以block size大小会影响索引大小。假设你的应用偏重于随机查找,能够选择小一点的block size;假设側重于顺序扫描。那么能够使用较大的block size。 hbase(main):002:0> create'mytable', {NAME => 'colfam1', BLOCKSIZE => '65536'} 2.Block cache:顺序扫描场景下block cache不是那么重要,能够禁用cache。将内存空间留给其它表或者列族。 hbase(main):002:0> create'mytable', {NAME => 'colfam1', BLOCKCACHE => 'false’} 3.Aggressive caching:为某些列族设置更高的block cache优先级,HBase会更积极地将其保留在LRU cache中。 hbase(main):002:0> create'mytable', {NAME => 'colfam1', IN_MEMORY => 'true'} 4. Bloom filters:block索引中仅仅存储了block的起始key,默认block size为64KB,假设表中每行数据都偏小,那么一个block中记录行数过多,可能会出现辛苦查找半天,发现所查找数据不存在的情况。通过Bloom filter引入negative test能高速推断数据是否存在 hbase(main):007:0>create 'mytable', {NAME=> 'colfam1', BLOOMFILTER => 'ROWCOL'} 5. TTL :用于自己主动清理过期数据 hbase(main):002:0>create 'mytable', {NAME => 'colfam1', TTL => '18000'} 6. Compression:Google公布的Snappy格式是个好选择。 hbase(main):002:0>create 'mytable', {NAME => 'colfam1', COMPRESSION => 'SNAPPY'}<span style="font-family: Arial, Helvetica, sans-serif;"></span> 7.Cell versioning:默觉得3. base(main):002:0>create 'mytable', {NAME => 'colfam1', VERSIONS => 1} Filter过滤器 Filter作用在RegionServer上,数据依旧会从磁盘载入到RegionServer。所以Filter一般降低的是网络I/O,而不是硬盘I/O(有一些Filter能降低硬盘数据读取,比方ColumnPrefixFilter)。 HBase提供了Filter接口。用户实现接口能够自己定义过滤功能。当中的过滤方法回调顺序例如以下: HBase还预置了一些filter。典型的如RowFilter public RowFilter(CompareOprowCompareOp, WritableByteArrayComparable rowComparator) 当中CompareOp代表比較操作符枚举类,比方相等、大于和小于等。Comparator代表详细比較逻辑。常见的有字符串比較、正则匹配和二进制比較等。 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5332788.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

花椒直播首次开源推流器组件 HJpusher

花椒直播开源其自主研发的直播推流器“HJpusher”,并上线OpenHarmony三方库中心仓。 根据介绍,作为鸿蒙生态音视频推流领域的重要开源项目,HJPusher是由伙伴共建开源的第一个鸿蒙应用推流器。该工具基于花椒直播自主通用多媒体框架HJMedia打造而来,采用创新的通用多媒体框架设计,以高度模块化、可扩展的插件化架构,极大提升了音视频功能开发效率与整体的资源利用率,为开发者提供高性能、低耦合的推流解决方案。 HJpusher 核心架构将采集、编码、推流、录制、前处理等功能封装为标准插件,统一标准数据接口通信,实现真正意义上的模块解耦。各插件之间通过Graph编排支持以“搭积木”方式自由组合,实现串联、并联及混合编排,开发者可按需构建出面向直播、录屏、特效渲染等多种场景的解决方案,既降低开发门槛,又显著提升资源利用率与扩展灵活性。例如,开发者可在推流流程中通过动态插入美颜、礼物叠加等视频过滤插件,也可并行实现推流与录制功能,共享音视频流以降低资源占用。 在功能层面,HJpusher 支持横竖屏多视角推流与预览,适配H.264/H.265硬编,具备多分辨率、多码率自定义能力;支持音频实时重采样与声道转换;推流过程中可随时开启/关闭⼩视频录制,⽆需额外调⽤第三⽅⼯具,实现"推流+录制"⼀体化操作;依托离屏渲染实现多路并行输出,可同时处理预览、推流、录制等多种任务且参数独立可控。 在弱网环境下,HJpusher引入“实时带宽探测 + 智能丢帧 + 码率阶梯调整”的三重机制,提升画面流畅度;即使在断网状态下,HJpusher也能凭借“智能重连+本地缓存续传”功能,在断⽹后可⾃动尝试重连,保障连接成功率和内容连续性。 此外,该推流器还支持动态叠加礼物动画、水印、弹幕等实时渲染特效,可自定义配置渲染层级,满足多样化视觉效果需求。同时具备丰富的业务消息通知与打点机制,支持开发者监控帧率、码率、丢包等关键指标,并可通过回调机制实现定制化处理与扩展。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册