最近一直在阅读有关Hadoop和HBase的资料,其中出现了这个词汇:
HBase是一个开源的、分布式的、稀疏的、面向列的存储...
什么是“稀疏”?它是否与稀疏矩阵有关?我猜想这是它能高效存储的数据类型的一种属性,因此想更多地了解它。
最近一直在阅读有关Hadoop和HBase的资料,其中出现了这个词汇:
HBase是一个开源的、分布式的、稀疏的、面向列的存储...
什么是“稀疏”?它是否与稀疏矩阵有关?我猜想这是它能高效存储的数据类型的一种属性,因此想更多地了解它。
在普通数据库中,行是稀疏的,但列不是。当创建一行时,会为每个列分配存储空间,无论该字段是否存在值(字段是为了表示行和列的交叉点而分配的存储空间)。
这样可以让固定长度的行大大提高读写速度。可变长度数据类型通过指针的类比进行处理。
稀疏列会导致性能下降,并且不太可能节省大量磁盘空间,因为用于指示NULL的空间要比链式指针结构所需的64位指针小,而大型非连续存储通常使用此结构实现。
存储很便宜,但性能不是。
See: http://www.larsgeorge.com/2009/10/hbase-architecture-101-storage.html
了解更多关于HBase存储的信息
数据表中有两种数据存储方式,分别是稀疏数据和密集数据。 以下是稀疏数据的示例。
假设我们需要在一个包含员工在2015年1月至2015年11月之间交易销售数据的表格上执行操作,触发查询后,我们将得到符合以上时间戳条件的数据。如果员工没有进行任何交易,则整行数据将返回空白。
例如: 员工编号 姓名 产品 日期 数量
1234 Mike Hbase 2014/12/01 1
5678
3454 Jole Flume 2015/09/12 3
带有empno5678的那一行没有数据,而其余行都包含了数据。如果我们考虑整个表格中包括空白行和已填充行的话,那么我们可以称之为稀疏数据。
如果我们只考虑已填充的数据,则被称为密集数据。