Что подразумевается под разреженными данными / хранилищем данных / базой данных?

в последнее время читали на Hadoop и HBase и наткнулись на этот термин-

HBase является открытым исходным кодом, распространяется, редкие, колоночное хранилище...

Что значит редкие? Это имеет какое-то отношение к разреженные матрицы? Я предполагаю, что это свойство типа данных, которые он может хранить эффективно, и, следовательно, хотел бы узнать больше об этом.

5 ответов


в обычной базе данных строки разрежены, а столбцы-нет. При создании строки память выделяется для каждого столбца, независимо от того, существует ли значение для этого поля (поля, хранилище, выделенное для пересечения строки и столбца).

Это позволяет фиксированной длины строк значительно улучшить время чтения и записи. Типы данных переменной длины обрабатываются с помощью аналога указателей.

разреженные столбцы будут нести штраф за производительность и маловероятно, что вы сэкономите много места на диске, потому что пространство, необходимое для указания NULL, меньше 64-разрядного указателя, необходимого для стиля связанного списка архитектуры цепного указателя, обычно используемой для реализации очень большого несмежного хранилища.

хранение дешево. Производительность нет.


на уровне хранения все данные хранятся в виде пары ключ-значение. Каждый файл хранения содержит индекс, так что он знает, где начинается каждое значение ключа и как долго это.

как следствие этого, если у вас очень длинные ключи (например, полный URL) и много столбцов, связанных с этим ключом, вы можете тратить некоторое пространство. Это несколько улучшается путем поворота сжатия на.

посмотреть: http://www.larsgeorge.com/2009/10/hbase-architecture-101-storage.html

для получения дополнительной информации о хранилище HBase


Sparse в отношении HBase действительно используется в том же контексте, что и разреженная матрица. Это в основном означает, что поля, которые являются нулевыми, могут свободно храниться (с точки зрения пространства).

Я нашел пару сообщений в блоге, которые касаются этой темы немного подробнее:

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


Лучшая статья, которую я видел, которая объясняет многие термины баз данных.

>http://jimbojw.com/#understanding%20hbase


существует два способа хранения данных в таблицах, это будут либо разреженные данные, либо плотные данные. пример для разреженных данных.

предположим, что мы должны выполнить операцию над таблицей, содержащей данные о продажах для транзакции сотрудником между месяцем jan2015 по ноябрь 2015, затем после запуска запроса мы получим данные, которые удовлетворяют условию метки времени если сотрудник не сделал никакой транзакции, то вся строка будет возвращена пустой

например. Имя EMPNo Количество Даты Продукта

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

строка с empno5678 не имеет данных, а остальные строки содержат данные, если мы рассмотрим всю таблицу с пустой строкой и заполненной строкой, то мы можем назвать ее разреженными данными.

Если мы берем только заполненные данные, то это называется плотными данными.