#google-bigquery
#google-bigquery
Вопрос:
Каков надлежащий баланс между денормализацией данных и отказом от повторения данных в Google Bigquery (или аналогичной базе данных)?
Например, мы имеем table_1
со столбцами
- Дата
- значение A
- значение B
И еще один table_2
со столбцами
- Дата
- значение B
- значение C
table_1
примерно в 10 000 раз больше, чем table_2
, и поэтому создание таблицы со всеми тремя столбцами дублировало бы много данных. И table_2
используется в нескольких других обстоятельствах, поэтому может иметь смысл хранить отдельно
Спасибо за любую информацию
Каков наилучший способ подумать об этом?
Комментарии:
1. Вы провели для них сравнение с точки зрения затрат? Помните, что в настоящее время 20 долларов США равны 1 ТБ данных в BigQuery. Я чувствую, что хранилище в наши дни настолько дешево, что мы не задумываемся об этом, просто мы повторно используем данные столько раз, сколько нам нужно.
2. Это скорее проблема управления данными, чем проблема затрат. Вы совершенно правы в том, что хранилище сейчас такое дешевое. Меня беспокоит то, что массовым умножением данных будет сложно управлять с точки зрения загрузки и обслуживания.
Ответ №1:
Если денормализация ваших данных не влечет за собой чрезмерного увеличения стоимости хранения (что маловероятно), вам лучше полностью денормализовать их.
Bigquery, вероятно, будет выполняться быстрее, а запросы будет проще настраивать. Попытка свести к минимуму объем хранимых данных дает мало пользы, и вы платите за время запроса и стоимость запроса, когда вам нужно снова объединить таблицы.
Если у вас есть набор таблиц, некоторые из которых большие, а некоторые маленькие, и вам не всегда нужно обращаться к большим таблицам для запросов, может быть практическая выгода в разделении таблиц, и это может снизить затраты на выполнение запросов.
Ответ №2:
Учитывая, что table1 в 10000 раз больше table2, я бы не стал денормализовывать данные. Вы заплатили бы в 10000 раз больше за выполнение запроса только с данными из таблицы 2.
Чтобы принять решение, я бы проанализировал, как часто запросы, соединяющие столбец C с A, выполняются, чтобы узнать, окупаются ли затраты на денормализацию. Соединения в BigQuery стоят дорого, но все еще доступны, если они происходят не часто.