大家好,很高兴再次与大家见面,我是你们的朋友全栈君。
为什么要采用列式存储?列式存储(Columnar或column-based)与传统的关系型数据库的行式存储(Row-based storage)不同。简单来说,两者的区别在于表的组织方式:行式存储按行序列存储表。列式存储按列序列存储表。
在行式存储中,表的数据是集中在一起的,而在列式存储中,数据是被分开保存的。
优点- 数据集中存储
– INSERT/UPDATE操作简便- 只读取涉及的列,查询效率高
– 投影(projection)操作高效
– 任意列都可以作为索引缺点- 即使只涉及几列,选择(selection)时也会读取所有数据- 选择操作后,需要重新组装列
– INSERT/UPDATE操作较为复杂
备注:列式数据库有利于投影操作。SQL中的投影是指从查询中选择并返回的列集合,换句话说,就是查询中SELECT后面的列。在Oracle中,首先会获取整行数据,然后从中提取指定列的数据到已知的投影中。
SELECT某个字段即为投影操作。
注:关系型数据库理论回顾 – 选择(Selection)和投影(Projection)
数据压缩:通过字典表压缩数据。下图展示了表在经过字典表压缩后的样子。通过字典表压缩,表中的字符串被转换为数字。由于每个字符串在字典表中只出现一次,从而实现了数据压缩的目的(这有点类似于规范化和非规范化的概念)。
查询执行性能:通过一个查询的执行过程来说明列式存储(以及数据压缩)的优点:
关键步骤如下:
在字典表中找到字符串对应的数字(仅进行一次字符串比较)。使用数字在列中进行匹配,匹配上的位置设为1。对不同列的匹配结果进行位运算,得到满足所有条件的记录下标。使用这些下标组装出最终的结果集。
发布者:全栈程序员栈长,转载请注明出处:https://www.php.cn/link/15826f19ea4eff3ab9b34f411276995c 原文链接:https://www.php.cn/link/c8377ad2a50fb65de28b11cfc628d75c
以上就是行存储(关系型数据库)与列存储(hbase,es聚合的doc_value)[通俗易懂]的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/31101.html
微信扫一扫
支付宝扫一扫