最近一直在阅读Hadoop和HBase,并且遇到了这个术语 -
HBase是一个开源的,分布式的,稀疏的,面向列的商店......
稀疏是什么意思?它与sparse matrix有关吗?我猜它是可以有效存储的数据类型的属性,因此,想要了解更多信息。
答案 0 :(得分:16)
在常规数据库中,行稀疏但列不稀疏。创建行时,将为每个列分配存储,而不管该字段是否存在值(字段是为行和列的交集分配的存储空间)。
这允许固定长度的行大大改善了读写时间。可变长度数据类型使用指针模拟处理。
稀疏列会导致性能损失并且不太可能为您节省大量磁盘空间,因为指示NULL所需的空间小于链接列表样式链接列表架构所需的64位指针通常用于实现非常大型非连续存储。
存储很便宜。表现不是。
答案 1 :(得分:4)
在存储级别,所有数据都存储为键值对。每个存储文件都包含一个索引,以便它知道每个键值的开始位置和长度。
因此,如果你有很长的密钥(例如一个完整的URL),并且有很多与该密钥相关的列,你可能会浪费一些空间。通过打开压缩可以稍微改善这一点。
请参阅: http://www.larsgeorge.com/2009/10/hbase-architecture-101-storage.html
有关HBase存储的更多信息
答案 2 :(得分:2)
关于HBase的稀疏确实在与稀疏矩阵相同的上下文中使用。它基本上意味着null的字段可以自由存储(就空间而言)。
我发现了几篇博文,更详细地介绍了这个主题:
http://blog.rapleaf.com/dev/2008/03/11/matching-impedance-when-to-use-hbase/
http://jimbojw.com/wiki/index.php?title=Understanding_Hbase_and_BigTable
答案 3 :(得分:1)
我见过的最好的文章,也解释了许多数据库术语。
答案 4 :(得分:0)
表格中存在两种数据存储方式,即稀疏数据和密集数据。 稀疏数据的示例。
假设我们必须在2015年1月至2015年11月之间对包含员工交易的销售数据的表执行操作,然后在触发查询后我们将获得满足上述时间戳条件的数据 如果员工没有进行任何交易,那么整行将返回空白
例如。 EMPNo名称产品日期数量
1234 Mike Hbase 2014/12/01 1
5678
3454 Jole Flume 2015/09/12 3
empno5678的行没有数据,其余行包含数据,如果我们考虑整个表有空行和填充行,那么我们可以将其称为稀疏数据。
如果我们只采用填充数据,那么它就被称为密集数据。