Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 什么是稀疏数据/数据存储/数据库?_Database_Hadoop_Database Schema_Hbase_Sparse Matrix - Fatal编程技术网

Database 什么是稀疏数据/数据存储/数据库?

Database 什么是稀疏数据/数据存储/数据库?,database,hadoop,database-schema,hbase,sparse-matrix,Database,Hadoop,Database Schema,Hbase,Sparse Matrix,我最近一直在阅读Hadoop和HBase,并且遇到了这个术语- HBase是一个开源的、分布式的、稀疏的、面向列的存储 他们所说的稀疏是什么意思?这和一个孩子有关吗?我猜这是它可以高效存储的数据类型的一个属性,因此,我想了解更多关于它的信息。关于HBase的稀疏实际上与稀疏矩阵在相同的上下文中使用。它基本上意味着空字段可以自由存储(在空间方面) 我发现有几篇博文更详细地谈到了这个问题: 在常规数据库中,行是稀疏的,而列不是稀疏的。创建行时,将为每列分配存储,而不管该字段是否存在值(为行和列的交

我最近一直在阅读Hadoop和HBase,并且遇到了这个术语-

HBase是一个开源的、分布式的、稀疏的、面向列的存储


他们所说的稀疏是什么意思?这和一个孩子有关吗?我猜这是它可以高效存储的数据类型的一个属性,因此,我想了解更多关于它的信息。

关于HBase的稀疏实际上与稀疏矩阵在相同的上下文中使用。它基本上意味着空字段可以自由存储(在空间方面)

我发现有几篇博文更详细地谈到了这个问题:


在常规数据库中,行是稀疏的,而列不是稀疏的。创建行时,将为每列分配存储,而不管该字段是否存在值(为行和列的交点分配存储的字段)

这允许固定长度的行大大缩短读取和写入时间。可变长度数据类型通过指针的模拟处理

稀疏列将导致性能损失,并且不太可能为您节省大量磁盘空间,因为指示NULL所需的空间小于链表式链接指针体系结构(通常用于实现非常大的非连续存储)所需的64位指针


储存很便宜。性能并非如此。

在存储级别,所有数据都存储为键值对。每个存储文件都包含一个索引,以便它知道每个键值的起始位置和长度

因此,如果您有很长的键(例如,完整的URL),并且有很多与该键相关的列,则可能会浪费一些空间。通过启用压缩功能,这会有所改善

见:


有关HBase存储的详细信息,请参阅我看过的最好的文章,该文章还解释了许多数据库术语


在表中存储数据有两种方式,即稀疏数据和密集数据。 稀疏数据的示例

假设我们必须对包含2015年1月至2015年11月期间员工交易的销售数据的表执行操作,那么触发查询后,我们将获得满足上述时间戳条件的数据 如果员工未进行任何交易,则整行将返回空白

例如。 EMPNo名称产品日期数量

 1234  Mike    Hbase    2014/12/01     1
 5678                                        
 3454  Jole    Flume    2015/09/12   3

具有EMPNO5678的行没有数据,其余的行包含数据,如果我们用空白行和填充行来考虑整个表,那么我们可以把它称为稀疏数据。< /P>


如果我们只获取填充的数据,那么它被称为密集数据。

在某些情况下,稀疏属性可以提高HBase中的性能。如果你要对某个特定的列族进行摘要,它不必检查某个特定的值是否为Null,以确定它是否应该包含它。不过,我大体上同意你的看法。你不应该使用HBase,因为它稀疏。。。这感觉更像是以列方式存储数据的一个很好的副作用。有趣的是,在RDBMS中,行是稀疏的,因为它们可以定义为null,而在HBase中,因为您不需要为每一行定义列数据@orangeoctopus,它在HBase中的性能有时也会受到影响吗?HBase不使用“链表式链接指针体系结构”。它的体系结构完全不同(请参阅另一个答案中的David链接)。HBase也不会存储指向文件系统中其他位置的单元格值的指针,除非您明确告诉它。一个表可能有数百或数千列(或更多),列值可能相对较大(例如索引)。在这种情况下,稀疏基本上是唯一的选择。@Peter将在David的回答中看到链接。HBase基本上存储表单的排序元组(键、列族、列名、时间戳、值)。如果列对于给定行没有值,则不存储元组。没有指向每个元组的指针,所以如果只需要查找一列,通常需要进行一些扫描。这种结构当然有缺点,但它允许每行有许多稀疏列(可以轻松添加列),并且允许版本控制。链接+1。有趣。但这与稀疏数据库没有直接关系。@Jai该链接解释了HBase如何以稀疏方式存储值。