Как физически хранятся данные в 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 предоставляет отсортированный порядок всех ключей строк в лексикографическом порядке; Системы хранения, ориентированные на столбцы, обычно не дают таких гарантий.