2016-07-12 5 views
0

Я ищу решение, которое будет содержать почти статический 200-Гбайт, структурированный, чистый набор данных и предоставить JSON API для данных, для запросов в веб-приложении.Решение для размещения 200 ГБ данных и предоставления JSON API агрегатов?

Каждая строка моих данных выглядит следующим образом, и у меня есть около 700 миллионов строк:

parent_org,org,spend,count,product_code,product_name,date 
A31,A81001,1003223.2,14,QX0081,Rosiflora,2014-01-01 

данные почти полностью статичным - он обновляет один раз в месяц. Я хотел бы поддержать простые агрегатные запросы, как:

  • получить общие расходы по кодам продукции, начиная QX, по организации, по месяцам
  • получить общие расходы по родительским орг A31, за месяц

И Я хотел бы, чтобы эти запросы были доступны через RESTful JSON API, чтобы я мог использовать данные в веб-приложении.

Мне не нужно делать соединения, у меня есть только один стол.

Solutions Я исследовал:

  • На сегодняшний день я использую Postgres (с веб-приложение, чтобы предоставить API), но я начинаю достигнуть пределов того, что я могу сделать с индексацией и материализованные представления , без специального оборудования + больше навыков, чем у меня есть
  • Google Cloud Datastore: подходит для структурированных данных примерно такого размера и имеет испеченный JSON API, но не выполняет агрегатов (поэтому я не мог поддерживать мои «общие расходы») выше
  • Google BigTable: может определенно делать данные такого размера, может выполнять агрегаты, может создавать мои собственный API с помощью App Engine? Может потребоваться преобразовать данные в hbase для импорта.
  • Google BigQuery: быстро на агрегацию, нужно будет свернуть свой собственный API, как с BigTable, легко импортировать данные

Я интересно, если есть общее решение для моих потребностей выше. Если нет, я также буду благодарен за любые советы по наилучшей настройке для размещения этих данных и предоставления JSON API.

Update: Кажется, что BigQuery и Cloud SQL поддержка SQL-подобные запросы, но Cloud SQL не может быть достаточно большим (см комментариев) и BigQuery становится дорогой очень быстро, потому что вы платите по запросу, так что ISN Идеально подходит для публичного веб-приложения. Datastore - это хорошее значение, но он не выполняет агрегатов, поэтому мне придется предварительно агрегировать и иметь несколько таблиц.

+0

Есть ли облачный SQL вариант здесь? Часто задаваемые вопросы по размеру - https://cloud.google.com/sql/faq#sizeqps –

+0

@SolomonDuskis Спасибо. Похоже, что он будет достаточно большим :) Возможно, он будет работать на наборе данных такого размера? Или ответ (как и в Postgres) «вы не узнаете, пока не попытаетесь с реальными данными»? – Richard

+0

Не знаю. Я больше человек из облака Bigtable, сам. Позвольте мне посмотреть, могу ли я получить кого-то из Cloud SQL, чтобы прослушивать. –

ответ

1

Посмотрите на ElasticSearch. Это JSON, REST, облако, распределенный, быстрый по совокупным запросам и так далее. Это может быть или не быть тем, что вы ищете.

+0

спасибо! возможно ли это справиться с этим большим количеством данных? – Richard

+0

предназначен для работы в облаке (эластичный кластер). Он может динамически расширяться, создавая больше узлов. Очевидно, для этого нужны архитекторы, которые знают, как реализовать такую ​​услугу (скажем, на AWS). Я использовал его в небольшом проекте, но мне пришлось изучить кластерный аспект. Я не работаю для них, поэтому все, что я могу/хочу сказать, это то, что я не знаю ни одного верхнего предела. Это зависит от того, сколько денег/узлов вы бросаете на него. – pid

+1

Получите это бесплатно, изучите некоторые учебные пособия, затем проверьте его с помощью процедурно генерируемых данных на настольном ПК или аналогичной установке. Это займет около 2-3 рабочих дней, чтобы изучить и протестировать очень простую настройку с 10-100 ГБ тестовых данных. Направьте прямо на то, что вам нужно, проигнорируйте все другие функции или у вас слишком много времени для изучения быстрого технологического выполнимости/стресс-теста. – pid

3

Cloud SQL, вероятно, достаточен для ваших нужд. Он, безусловно, способен обрабатывать 200 ГБ, особенно если вы используете второе поколение Cloud SQL.

Они только объясняют, почему обычной базы данных, такой как MySQL (используется облачный SQL-сервер), может быть недостаточно, если ваши запросы очень сложны и не индексируются. Я рекомендую вам попробовать Cloud SQL, и если производительности недостаточно, попробуйте убедиться, что у вас достаточно индексов (подсказка: используйте EXPLAIN statement, чтобы посмотреть, как выполняются запросы).

Если ваши запросы не могут быть проиндексированы полезным способом, или ваши запросы настолько интенсивны, что они медленны, независимо от индексации, возможно, вам захочется перейти на BigQuery. BigQuery распараллелен, так что он может обрабатывать почти столько же данных, сколько вы его бросаете, однако он не оптимизирован для использования в режиме реального времени и не так созван, как «MySQL в блоке» Cloud SQL.