Google Bigtable против BigQuery для хранения большого количества событий
Фон
Мы хотели бы хранить наши неизменные события в (предпочтительно) управляемом сервисе. Средний размер одного события составляет менее 1 КБ, и мы имеем от 1 до 5 событий в секунду. Основная причина хранения этих событий - возможность их воспроизведения (возможно, с использованием сканирования таблиц), как только мы создадим будущие сервисы, которые могут быть заинтересованы в этих событиях. Так как мы в облаке Google, мы, очевидно, рассматриваем сервисы Google как первый выбор.
Я подозреваю, что Bigtable подойдет для этого, но, согласно калькулятору цен, он будет стоить нам более 1400 долларов США в месяц (что для нас очень важно):
Глядя на что-то вроде BigQuery, вы получаете цену 3 доллара в месяц (если я не пропускаю что-то важное):
Несмотря на то, что база данных без схемы была бы лучше для нас, нам было бы неплохо хранить наши события в виде большого двоичного объекта с некоторыми метаданными.
Вопросы
Можем ли мы использовать BigQuery для этого вместо Bigtable, чтобы сократить расходы? Например, в BigQuery есть что-то, называемое потоковыми вставками, которое мне кажется чем-то, что мы могли бы использовать. Есть ли что-то, что может укусить нас в краткосрочной или долгосрочной перспективе, о чем я мог бы не знать, если пойдет по этому пути?
5 ответов
Bigtable отлично подходит для больших (>= 1 ТБ) изменяемых наборов данных. Он имеет низкую задержку под нагрузкой и управляется Google. В вашем случае, я думаю, вы на правильном пути с BigQuery.
FYI
Cloud Bigtable не является реляционной базой данных; он не поддерживает запросы или объединения SQL, а также не поддерживает многострочные транзакции. Кроме того, это не очень хорошее решение для небольших объемов данных (< 1 ТБ).
Рассмотрим следующие случаи: - Если вам нужна полная поддержка SQL для системы онлайн-обработки транзакций (OLTP), рассмотрите Google Cloud SQL.
Если вам нужны интерактивные запросы в системе интерактивной аналитической обработки (OLAP), рассмотрите Google BigQuery.
Если вам нужно хранить неизменяемые большие двоичные объекты размером более 10 МБ, например, большие изображения или фильмы, рассмотрите Google Cloud Storage.
Если вам нужно хранить высокоструктурированные объекты или если вам требуется поддержка транзакций ACID и SQL-подобных запросов, рассмотрите Cloud Datastore.
Общая стоимость сводится к тому, как часто вы будете "запрашивать" данные. Если это резервная копия и вы не будете воспроизводить события слишком часто, это будет очень дешево. Однако, если вам нужно воспроизводить его один раз в день, вы начнете слишком быстро запускать сканирование на 5$/ ТБ. Мы также были удивлены, насколько дешевыми были вставки и хранилище, но это, конечно, потому что Google ожидает, что вы в какой-то момент будете выполнять на них дорогостоящие запросы. Вам придется придумать несколько вещей. Например, потоковые вставки AFAIK не гарантируют, что они будут записаны в таблицу, и вам приходится часто опрашивать в конце списка, чтобы увидеть, действительно ли он был записан. Хвост может быть эффективно выполнен с помощью декоратора таблицы временного диапазона (не оплачивая сканирование всего набора данных).
Если вы не заботитесь о порядке, вы можете даже бесплатно перечислить столик. Нет необходимости запускать запрос.
Эта блок-схема может помочь в выборе между различными предложениями облачного хранилища Google (отказ от ответственности! Скопировал это изображение со страницы облака Google)
Если ваш сценарий использования - это живая база данных (скажем, серверная часть веб-сайта), то вам нужен BigTable (хотя это не совсем OLTP- система) . Если это скорее цель анализа данных / хранилища данных, то BigQuery - это то, что вам нужно.
Подумайте о OLTP против OLAP; Или, если вы знакомы с Cassandra и Hadoop, BigTable примерно приравнивается к Cassandra, BigQuery примерно приравнивается к Hadoop (Согласен, не честное сравнение, но вы поняли идею)
https://cloud.google.com/images/storage-options/flowchart.svg
Имейте в виду, что Bigtable не является реляционной базой данных, это решение noSQL без каких-либо функций SQL, таких как JOIN и т. Д. Если вы хотите использовать RDBMS OLTP, вам, возможно, придется взглянуть на cloudSQL (mysql / postgres) или на гаечный ключ.
Облачный гаечный ключ относительно молодой, но мощный и перспективный. По крайней мере, маркетинг Google утверждает, что его функции являются лучшими из обоих миров (традиционная RDBMS и noSQL)
Стоимость Аспект
Аспект стоимости уже хорошо освещен здесь /questions/9519955/google-bigtable-protiv-bigquery-dlya-hraneniya-bolshogo-kolichestva-sobyitij/9519958#9519958
Я знаю, что это очень поздний ответ, но добавление его в любом случае может помочь кому-то еще в будущем.
Трудно подвести итог лучше, чем это уже сделано Google - https://cloud.google.com/bigtable/docs/
Проверьте Cloud Bigtable и другие разделы хранилища
Я думаю, что вам нужно выяснить, как вы собираетесь использовать (воспроизводить) свои данные (события), и это может помочь вам в принятии окончательного решения.
Пока что BigQuery выглядит как лучший выбор для вас
Bigtable - это распределенная (работающая на кластерах) база данных для приложений, управляющих большими объемами данных. Он предназначен для массивных неструктурированных данных, масштабируется по горизонтали и состоит из семейств столбцов. Он хранит данные в парах ключ-значение, в отличие от реляционных или структурированных баз данных.
BigQuery - это приложение хранилища данных. Это означает, что он обеспечивает соединение с несколькими источниками данных или потоками, чтобы их можно было извлекать, преобразовывать и загружать в таблицу bigQuery для дальнейшего анализа. В отличие от Bigtable, он хранит данные в структурированных таблицах и поддерживает запросы SQL.
Сценарии использования; Если вы хотите проводить аналитику или бизнес-аналитику, извлекая информацию из собранных данных из разных источников (приложений, исследований, опросов, отзывов, журналов и т. Д.) Вашей организации, вы можете собрать всю эту информацию в одном месте. Скорее всего, это хранилище данных Bigquery.
Если у вас есть приложение, которое собирает большие данные, другими словами массивную информацию (большой объем данных) за раз с более высокой скоростью (высокая скорость) и в неструктурированных несогласованных формах с различными типами данных, такими как аудио, текст, видео, изображения и т. Д.. (Разнообразие и достоверность), то вероятным выбором приложения базы данных для этого приложения будет Bigtable.