Как физически хранятся данные в Bigtable

Давайте возьмем стол test

                  cf:a          cf:b      yy:a      kk:cat
"com.cnn.news"    zubrava10     sobaka    foobar
"ch.main.users"   -             -         -         purrpurr

И первая ячейка ("zubrava") имеет 10 версий (10 отметок времени) ("zubrava1", "zubrava2"...)

Как данные этой таблицы будут храниться на диске?

Я имею в виду, это основной индекс всегда

("row","column_family:column",timestamp) ?

Таким образом, 10 версий одной строки для 10 временных меток будут храниться вместе? Как хранится вся таблица?

Является ли сканирование для всех значений данного столбца таким же быстрым, как в моделях, ориентированных на столбцы?

SELECT cf:a from test

1 ответ

Таким образом, 10 версий одной строки для 10 временных меток будут храниться вместе? Как хранится вся таблица?

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

Является ли сканирование для всех значений данного столбца таким же быстрым, как в ориентированных на столбцы моделях?

SELECT cf:a from test

Нет, ориентированная на столбцы модель хранения хранит все данные для одного столбца вместе по всем строкам. Таким образом, сканирование полной таблицы в системе, ориентированной на столбцы (например, Google BigQuery), выполняется быстрее, чем в системе хранения, ориентированной на строки, но система, ориентированная на строки, обеспечивает мутации на основе строк и атомарные мутации на основе строк, которые Колонно-ориентированная система хранения обычно не может.

Помимо этого, Bigtable предоставляет отсортированный порядок всех ключей строк в лексикографическом порядке; Системы хранения, ориентированные на столбцы, обычно не дают таких гарантий.

Другие вопросы по тегам