|
Пространный вопрос. Как HBase / Cassandra физически хранят данные? И главное зачем? )
|
|||
---|---|---|---|
#18+
В Hadoop нижний слой (файлы в HDFS) умеют только добавление в конец, поэтому на Hadoop хорошо легла идея SSTable, когда memtable периодически идёт на диск в формате SSTable (сортированный список key=value) и идея фонового compaction. Ну и придумали HBase. Схема данных в HBase - это BigTable. На нижнем уровне данные хранятся как куча key=value. Про timestamp в ячейке давайте пока забудем. Key выглядит так: row:CF:column. То есть, имея 2 разных CF мы получим для всех строк 2 отдельных последовательности ключей: Код: plaintext 1. 2. 3. 4.
Код: plaintext 1. 2. 3. 4.
Как-то много дублирования данных! Я не очень понимаю кому это было надо. Ну то есть конечно круто, когда можно в CF без предупреждения добавить новую колонку. Но это ведь происхоит нечасто. Все хипстеры, гордящиеся своим document-oriented, что они могут легко на лету поменять "схему" (которой нет) меняют её всё равно не так уж часто, а в моменты добавленя новых фич. Это я к чему - будет понятно позже. Читаем далее ) Ну например google решил собирать про сайты какую-то новую метрику - "rt", например время ответа. Была CF "timings". Там была колонка "a". Гугл добавит туда колонку "rt" и будет класть данные туда. Физически на диске колонка "rt" сохранится рядом с прочими колонками из CF "timings" и будет всё так: Код: plaintext 1. 2. 3. 4.
Но бОльшую часть времени "схема" не меняется. Колонки обычно содержат очень дофига записей. Зачем физически на диске дублировать названия колонок в ключах для каждого значения ? Почему желая сохранить 1 млрд значений для колонки rt я должен 1 млрд раз сохранить байты "timings:rt" на хранение ключа? Почему не запилить некую гибридную схему, которая в таких случаях (с млрд последовательными значениями) приближает физическое хранение данных к тому, что дают чистые column-oriented типа YandexClickhouse, когда 1 млрд значений прото лежат друг за другом? Я так догадываюсь, всё дело в мега-разряженности BigTable. Если у вас нет мега-разряженности, когда колонок овердохрена, а данные для конкретной строки занимают всегда процентов 5 всех колонок, тогда BigTable не оптимально использует хранилище, не оптимально позволить просканировать столбцы. То есть, реально нужно это только реальному гуглу или яндексу, которые собирают адские тысячи параметров про каждую строку, 99% из которых всегда пустуют. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2017, 16:04 |
|
Пространный вопрос. Как HBase / Cassandra физически хранят данные? И главное зачем? )
|
|||
---|---|---|---|
#18+
Vocoder_5Но бОльшую часть времени "схема" не меняется. Колонки обычно содержат очень дофига записей. Зачем физически на диске дублировать названия колонок в ключах для каждого значения ? Почему желая сохранить 1 млрд значений для колонки rt я должен 1 млрд раз сохранить байты "timings:rt" на хранение ключа? Почему не запилить некую гибридную схему, которая в таких случаях (с млрд последовательными значениями) приближает физическое хранение данных к тому, что дают чистые column-oriented типа YandexClickhouse, когда 1 млрд значений прото лежат друг за другом? Более того, можно было сказать, что у нас не более 2G колонок и сделать отдельный словарь полей. В целом- мой опыт работы с hbase свялся к выводу "если есть возможность обойтись без hbase - надо обойтись". А в сумме- большая часть NoSQL это наколенные решения- когда "велосипед" вдруг поехал и его расшарили. Никакой архитектурной проработки на первом этапе нет. Если что-то не пошло- рядом пилится новое (в том же hadoop постоянно возникают способы сделать то же но лучше, да хотя бы mr1->yarn). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2017, 07:17 |
|
Пространный вопрос. Как HBase / Cassandra физически хранят данные? И главное зачем? )
|
|||
---|---|---|---|
#18+
Vocoder_5 Но бОльшую часть времени "схема" не меняется. Колонки обычно содержат очень дофига записей. Зачем физически на диске дублировать названия колонок в ключах для каждого значения ? Почему желая сохранить 1 млрд значений для колонки rt я должен 1 млрд раз сохранить байты "timings:rt" на хранение ключа? так не хранит вроде, там еще компрессия сверху. она дублирование убирает. Vocoder_5Я так догадываюсь, всё дело в мега-разряженности BigTable. Если у вас нет мега-разряженности, когда колонок овердохрена, а данные для конкретной строки занимают всегда процентов 5 всех колонок, тогда BigTable не оптимально использует хранилище, не оптимально позволить просканировать столбцы. То есть, реально нужно это только реальному гуглу или яндексу, которые собирают адские тысячи параметров про каждую строку, 99% из которых всегда пустуют. Так? скорее это под подход где храниться ключ, timestamp, тип и json объекта. типы объектов разные, метрики, лайки, твиты, все в кучу, все в одной бигдата табличке. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2017, 08:50 |
|
Пространный вопрос. Как HBase / Cassandra физически хранят данные? И главное зачем? )
|
|||
---|---|---|---|
#18+
Yo.!Vocoder_5Но бОльшую часть времени "схема" не меняется. Колонки обычно содержат очень дофига записей. Зачем физически на диске дублировать названия колонок в ключах для каждого значения ? Почему желая сохранить 1 млрд значений для колонки rt я должен 1 млрд раз сохранить байты "timings:rt" на хранение ключа? так не хранит вроде, там еще компрессия сверху. она дублирование убирает. Vocoder_5Я так догадываюсь, всё дело в мега-разряженности BigTable. Если у вас нет мега-разряженности, когда колонок овердохрена, а данные для конкретной строки занимают всегда процентов 5 всех колонок, тогда BigTable не оптимально использует хранилище, не оптимально позволить просканировать столбцы. То есть, реально нужно это только реальному гуглу или яндексу, которые собирают адские тысячи параметров про каждую строку, 99% из которых всегда пустуют. Так? скорее это под подход где храниться ключ, timestamp, тип и json объекта. типы объектов разные, метрики, лайки, твиты, все в кучу, все в одной бигдата табличке. Про сжатие - да, ок, оно снизит дублирование на диске. Но в памяти оно будет... Про "скорее это под" - не согласен, я бы сделал акцент на слове sparse . Разряженная табличка. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2017, 12:54 |
|
Пространный вопрос. Как HBase / Cassandra физически хранят данные? И главное зачем? )
|
|||
---|---|---|---|
#18+
Alexey TominVocoder_5Но бОльшую часть времени "схема" не меняется. Колонки обычно содержат очень дофига записей. Зачем физически на диске дублировать названия колонок в ключах для каждого значения ? Почему желая сохранить 1 млрд значений для колонки rt я должен 1 млрд раз сохранить байты "timings:rt" на хранение ключа? Почему не запилить некую гибридную схему, которая в таких случаях (с млрд последовательными значениями) приближает физическое хранение данных к тому, что дают чистые column-oriented типа YandexClickhouse, когда 1 млрд значений прото лежат друг за другом? Более того, можно было сказать, что у нас не более 2G колонок и сделать отдельный словарь полей. В целом- мой опыт работы с hbase свялся к выводу "если есть возможность обойтись без hbase - надо обойтись". А в сумме- большая часть NoSQL это наколенные решения- когда "велосипед" вдруг поехал и его расшарили. Никакой архитектурной проработки на первом этапе нет. Если что-то не пошло- рядом пилится новое (в том же hadoop постоянно возникают способы сделать то же но лучше, да хотя бы mr1->yarn). лайкнул! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2017, 10:17 |
|
|
start [/forum/topic.php?fid=48&fpage=5&tid=1856685]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
114ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 343ms |
total: | 548ms |
0 / 0 |