Автор Анируд Раманатан
В этом блоге я сравниваю варианты для аналитики в реальном времени на Dynamodb — Athena, Spark и Elastic — с точки зрения простоты настройки, обслуживания, возможностей запроса, задержки. Существует ограниченная поддержка SQL Analytics с некоторыми из этих вариантов. Я также оцениваю, какие случаи использования каждый из них лучше всего подходит.
Разработчики часто требуют использования быстрых аналитических запросов над данными в Amazon DynamoDB, чтобы включить живые представления о функциях бизнеса и приложений, таких как персонализация и отзывы пользователя в реальном времени. Однако в качестве оперативного хранения данных, оптимизированных для обработки транзакций, DynamOdb не очень хорошо подходит для доставки аналитики в реальном времени. На Countset мы недавно добавили поддержку для создания коллекций, которые Потяните данные из Amazon Dynamodb — Что в основном означает, что вы можете Запустите быстрый SQL на таблицах Dynamodb без какого-либо ETL. В рамках этих усилий я потратил значительное количество времени, оценивающую методы разработчиков, используемые для выполнения аналитики на данных Dynamodb и понимания, какой метод лучше всего подходит на основе случая использования и обнаружил, что Афина, искра и эластичны у каждого есть свои собственные плюсы и Минусы.
DynamOdb был одним из самых популярных баз данных NoSQL в облаке с момента своего введения в 2012 году. Это центральное значение для многих современных приложений в области AD Tech, Gaming, IoT и финансовых услуг. В отличие от традиционных RDBMS Как PostgreSQL, весы Dynamodb горизонтально, усугубляя необходимость в тщательном планировании емкости, перезарядки и обслуживания базы данных. В то время как базы данных NoSQL, такие как Dynamodb, обычно имеют превосходные характеристики масштабирования, они поддерживают только ограниченный набор операций, которые ориентированы на обработку онлайн-транзакции. Это затрудняет развитие аналитики прямо на них.
Для поддержки аналитических запросов разработчики обычно используют множество различных систем в сочетании с Dynamodb. В следующих разделах мы будем исследовать несколько из этих подходов и сравнивать их вдоль осей простоты настройки, технического обслуживания, возможности, задержки запросов и использования, которые они подходят хорошо.
Если вы хотите поддержать аналитические запросы, не сталкивающиеся о запрещенных затратах на сканирование, вы можете использовать вторичные индексы в Dynamodb, который поддерживает ограниченный тип запросов. Однако для большинства случаев аналитического использования это экономически эффективно экспортировать данные из DynamOdb в другую систему, такую как Афина, искра, эластичность или какашка, как описано ниже, поскольку они позволяют вам запросить с более высокой верностью.
Динамодб + Клей + S3 + Афина
Один из подходов должен извлекать, преобразовывать и загружать данные из Dynamodb на Amazon S3, а затем использовать услугу, такую как Amazon Athena, чтобы запустить запросы над ним. Мы можем использовать AWS Clee для выполнения процесса ETL и создать полную копию таблицы Dynamodb в S3.
Amazon Athena ожидает быть представленным схемой, чтобы иметь возможность запустить SQL-запросы на данные в S3. Dynamodb, являясь магазином NoSQL, накладывает неподвижную схему на хранимых документах. Следовательно, нам необходимо извлечь данные и вычислять схему на основе типов данных, наблюдаемых в таблице Dynamodb. AWS CLEUE — полностью управляемый ETL-сервис, который позволяет нам делать обоими. Мы можем использовать две функциональные возможности, предоставляемые AWS Clue-Trawler и ETL заданиями. Shrawler — это сервис, который подключается к хранилище DataStore (например, Dynamodb) и сканирует через данные для определения схемы. Отдельно клей ETL Apache Spark Spark может просканировать и сбрасывать содержимое любого таблицы Dynamodb в S3 в формате паркета. Эта работа ETL может занять минуты до нескольких часов, чтобы пройти в зависимости от размера таблицы DynamOdb и прочитанной пропускной способности на таблице DynamOdb. После завершения оба этих процесса мы можем выстрелить Amazon Athena и запустить запросы на данные в Dynamodb.
Весь этот процесс не требует предоставления любых серверов или емкости или управления инфраструктурой, которая является выгодной. Он может быть легко автоматизирован, используя триггеры клея для запуска по расписанию. Amazon Athena может быть подключена к приборной панели, такой как Amazon QuickSight, которая может быть использована для разведочного анализа и отчетности. ATHENA основана на Apache Presto, которое поддерживает запрос вложенные поля, объекты и массивы в JSON.
Основным недостатком этого метода является то, что данные не могут быть запрошены в реальном времени или в режиме реального времени. Сброс все содержимое Dynamodb может занять минуты до нескольких часов до того, как он доступен для беговых аналитических запросов. Нет инкрементных вычислений, которые сохраняют два синхронизации, каждая нагрузка — это совершенно новая синхронизация. Это также означает, что данные, которые эксплуатируются на Amazon Athena, могут быть несколько часов устаревшей.
Процесс ETL также может потерять информацию, если наши данные Dynamodb содержат поля, которые имеют смешанные типы на разных элементах. Типы полевых сигналов выводятся при выведении клей, выползвывая Dynamodb, а обнаруженный доминирующим типом будет назначен как тип столбца. Хотя в ATHENA есть поддержка JSON в ATHENA, требуется некоторая настройка и управление DDL для включения вложенных полей в столбцы для эффективной их запросов. Также могут быть некоторые усилия, необходимые для обслуживания синхронизации между DynamOdb, клеем и ATHENA, когда структура данных в различных изменениях динамода.
Преимущества
- Все компоненты «безверены» и не требуют предоставления инфраструктуры
- Легко автоматизировать трубопровод ETL
Недостатки
- Высокая концевая задержка данных в нескольких часах, что означает устаревшие данные
- Задержка запросов варьируется между десятками секунд до минут
- Принуждение к схему может потерять информацию со смешанными типами
- Процесс ETL может время от времени потребовать обслуживания, если структура данных в исходных изменениях
Этот подход может хорошо работать для этих панелей мониторинга и аналитики, которые не требуют запроса последних данных, но вместо этого можно использовать немного старый снимок. Задержки SQL Amazon Athena в секунду до нескольких минут в сочетании с большим концевым задержкой процесса ETL делает этот подход неподходящим для создания рабочих приложений или в режиме реального времени на DishoDB.
Динамодб + Улей/искра
Альтернативный подход к разгрузке всего таблицы DynamOdb на S3 — напрямую запрашивать запросы на него, используя интеграцию Hive Dynamodb. Интеграция Hive позволяет запросить данные в Dynamodb, непосредственно с помощью HiveQL, понравившись SQL, который может экспрессировать аналитические запросы. Мы можем сделать это, настроив кластер Amazon EMR с установленным улей.
После того, как наш кластер настроен, мы можем войти в наш главный узел и указать внешнюю таблицу в Cive, указывая на таблицу DynamOdb, которую мы стремимся к запросу. Это требует, чтобы мы создадим эту внешнюю таблицу с определенной определением схемы для типов данных. Одно предостережение заключается в том, что улей читается интенсивно, и таблица DynamOdb должна быть настроена с достаточной пропускной способностью читания, чтобы избежать голодающих других приложений, которые подаются от нее.
Этот подход дает нам более актуальные результаты и действует на таблице Dynamodb напрямую, а не на создание отдельного снижения. Тот же механизм, который мы видели в предыдущем разделе, применяются в том, что нам нужно предоставить схему, которую мы вычисляем с использованием услуг, такого как AWS Clue Crawler. Как только внешняя таблица настроена с правильной схемой, мы можем запустить интерактивные запросы на таблице DynamoDB, написанные в HiveQL. Очень похоже, что можно также подключить Apache Spark к таблице Dynamodb Использование разъема для запуска Spark SQL-запросов. Преимущество этих подходов состоит в том, что они способны работать на современных данных Dynamodb.
Недостатком подхода состоит в том, что он может занять несколько секунд до нескольких минут для вычисления результатов, что делает его меньше, чем идеально подходит для случаев использования в реальном времени. Включение новых обновлений, поскольку они возникают в основные данные, обычно требуют другого полного сканирования. Операции сканирования на Dynamodb могут быть дорогими. Запуск этих аналитических запросов, работающих на столе Scans, часто может негативно влиять на рабочую нагрузку, которая использует DynamOdb. Следовательно, трудно включить оперативные приложения, построенные непосредственно на этих запросах.
Для того, чтобы обслуживать приложения, нам может потребоваться сохранить результаты запросов, выполняемых с помощью Tive/Spark в реляционную базу данных, такую как PostgreSQL, которая добавляет другой компонент для обслуживания, администрирования и управления. Такой подход также отходит из «Serverless» Paradigm, которую мы использовали в предыдущих подходах, поскольку требует управления некоторой инфраструктурой, то есть экземпляров EC2 для EMR и, возможно, также установка PostgreSQL.
Преимущества
- Запросы за последние данные в dynamodb
- Не требует ETL/предварительной обработки, кроме указания схемы
Недостатки
- Принуждение к схему может потерять информацию, когда поля имеют смешанные типы
- Cluster EMR требует некоторой администрации и управления инфраструктурой
- Запросы за последние данные включают в себя сканы и дороги
- Задержка запросов варьируется между десятками секунд до нескольких минут непосредственно на улей/искре
- Безопасность и производительность Последствия работы аналитических запросов на оперативной базе данных
Этот подход может хорошо работать для некоторых видов приборных панелей и аналитиков, у которых нет требований жестких задержек, и где она не стоит запретила сканирование по всей таблице «Динамода» для специальных интерактивных запросов. Однако для аналитики в реальном времени нам нужен способ запускать широкий спектр аналитических запросов без дорогих полных сканов или снимков или снимков, которые быстро выпадают на дату.
Dynamodb + AWS Lambda + Elasticsearch
Другой подход к созданию вторичного индекса над нашими данными является использование Dynamodb с Elasticsearch. Elasticsearch можно настроить на AWS, используя Amazon Elasticsearch Service , который мы можем использовать для обеспечения и настройки узлов в соответствии с размером наших индексов, репликации и других требований. Управляемый кластер требует некоторых операций для обновления, безопасных и хранения исполнительных веществ, но меньше всего, чем запускает его целиком на экземплярах EC2.
Как подход с использованием Плагин logstash для Amazon Динамодб Неподдерживается и довольно сложно настроить, мы можем вместо того, чтобы поток пишет с DynamOdb в elasticsearch, используя dynamodb Потоки и функция aws lambda. Этот подход требует, чтобы мы выполняли два отдельных этапа:
- Сначала мы создаем функцию лямбда, которая вызывается на потоке dynamodb, чтобы опубликовать каждое обновление, как это происходит в dynamodb в elasticsearch.
- Затем мы создаем функцию лямбда (или экземпляр EC2, выполняющий скрипт, если он займет больше времени, чем время ожидания Lambda), чтобы опубликовать все существующее содержимое DynamOdb в Elasticsearch.
Мы должны писать и проводить обе эти лямбда функции с правильными разрешениями, чтобы убедиться, что мы не пропустим никаких пишетов в наши таблицы. Когда они создаются вместе с необходимым мониторингом, мы можем получать документы в Elasticsearch из Dynamodb и могут использовать Elasticsearch для запуска аналитических запросов на данные.
Преимущество этого подхода заключается в том, что elasticsearch поддерживает полнотекстовую индексацию и несколько типов аналитических запросов. Elasticsearch поддерживает клиентов на различных языках и инструментах, таких как Kibana для визуализации, которая может помочь быстро построить панель инструментов. Когда кластер настроен правильно, задержки запросов могут быть настроены для быстрых аналитических запросов над данными, протекающими в elasticsearch.
Недостатки включают в себя, что стоимость установки и обслуживания раствора может быть высокой. Потому что лямбдас огонь, когда они видят обновление в потоке DynamoDB, они могут иметь задержки Spikes из-за холодно начинается Отказ Настройка требует метрик и мониторинга, чтобы гарантировать, что она правильно обрабатывает события из потока DynamOdb и способна писать в elasticsearch. Это также не «серведно» в том, что мы платим за предоставленные ресурсы, в отличие от ресурсов, которые мы фактически используем. Даже управляемые ELASTICSAYSCEALK требуют дело с репликацией, репликацией, ростом индекса и настройкой производительности основных экземпляров. Функционально с точки зрения аналитических запросов ему не хватает поддержки присоединения, которые полезны для сложных аналитических запросов, которые включают более одного индекса.
Преимущества
- Полнотекстовый поиск поддержки
- Поддержка нескольких видов аналитических запросов
- Может работать над последними данными в Dynamodb
Недостатки
- Требуется управление и мониторинг инфраструктуры для проглатывания, индексации, репликации и кастрюли
- Требуется отдельная система для обеспечения целостности и согласованности данных между DynamOdb и Elasticsearch
- Масштабирование — это ручное и требует предоставления дополнительной инфраструктуры и операции
- Нет поддержки присоединения между различными индексами
Этот подход может хорошо работать при реализации полнотекстового поиска по данным в Dynamodb и Dishboards с помощью Kibana. Однако операции, необходимые для настройки и поддержания кластера ELASTICSearch Production, с жесткими требованиями к задержке и целостности данных для приборных панелей и приложений в реальном времени могут быть сложными.
Dynamodb + Потрясающий
Клайна Это полностью управляемая услуга для поиска и аналитики. Rockset имеет живую интеграцию с Dynamodb, которая может быть использована для сохранения данных в синхронизации между DynamOdb и Rockset. Мы можем указать таблицу DynamOdb, мы хотим синхронизировать содержимое из коллекции Rockset, которая индексирует таблицу. COOCKSET Индексы содержимого таблицы Dynamodb в полном снижении, а затем синхронизируют новые изменения, поскольку они происходят. Содержимое коллекции Rockset всегда в синхронизации с источником Dynamodb; не более нескольких секунд, кроме устойчивого состояния.
Rockset управляет целостностью и согласованностью данных между таблицей DynamOdb и Colctset Collection автоматически путем мониторинга состояния потока и обеспечивая видимость потоковых изменений с DynamOdb.
Без определения схемы коллекция Rockset может автоматически адаптироваться, когда поля добавляются/удалены или когда структура/тип сама данных изменяется в Dynamodb. Это сделано возможным по Сильная динамическая печатание и Smart Schemas Это устраняет необходимость в любом дополнительном ETL.
Сборка Rockset, которую мы поставили от Dynamodb, поддерживают SQL для запроса и могут быть легко использованы для создания приборных панелей в реальном времени с использованием интеграций с Tableau , Superset , Редак , так далее. Он также может быть использован для обслуживания запросов к приложениям через API для отдыха или используя клиентские библиотеки на нескольких языках программирования. Supperet of Ansi SQL, который поддерживает COOCKSet Best Manse, может работать на глубоко вложенных массивах и объектах JSON и объектами, и используйте индексы, которые автоматически построены по всему полям, чтобы получить миллисекундные задержки на даже сложных аналитических запросах.
Кроме того, Rockset заботится о безопасности, шифровании данных и контроля доступа на основе ролей для управления доступом к нему. Мы можем избежать необходимости ETL, используя сопоставления Мы можем настроить в Rockset, чтобы изменить данные, поставляющие его в коллекцию. Мы также можем дополнительно управлять жизненным циклом данных, настроив политику удержания, чтобы автоматически очистить более старые данные. Оба сведения о приеме данных и обслуживания запросов автоматически управляются, что позволяет нам сосредоточиться на создании и развертывании живых панелей и приложений и приложений при удалении необходимости управления инфраструктурой и операциями.
Rockset — это хорошо подходит для аналитики в реальном времени на вершине оперативных хранилищ данных, таких как DynamOdb по следующим причинам.
Резюме
- Полностью неверный. Нет операций или предоставления инфраструктуры или не требуется базы данных
- Живая синхронизация между Dynamodb и коллекцией Rockset, чтобы они никогда не более чем на несколько секунд
- Мониторинг для обеспечения согласованности между Dynamodb и Rockset
- Автоматические индексы, построенные над данными, позволяющими низкозадержка запросов
- SQL-запрос, обслуживающий, который может масштабировать до высокого QPS
- Присоединяется к данным из других источников, таких как Amazon Kinesis, Apache Kafka, Amazon S3 и т. Д.
- Интеграция с такими инструментами, как Tableau, Redash, Superset и API SQL API и использование клиентских библиотек.
- Особенности, включая полнотекстовый поиск, прошеистные преобразования, удержание, шифрование и тонкозернистый контроль доступа
Мы можем использовать Cocket для реализации полнотекстового поиска и аналитики в реальном времени по данным в Dynamodb без каких-либо оперативных, масштабирования или проблем обслуживания. Это может значительно ускорить разработку живых приборных панелей и приложений.
Если вы хотите попробовать Cocket для вашей аналитики в режиме реального времени на Dynamodb, вы можете начать бесплатно на здесь Отказ Для более подробного примера того, как можно запустить SQL-запросы на таблице Dynamodb, синхронизированные в Cocket, проверьте наш блог на Бег быстрый SQL на таблицах Dynamodb Отказ
Оригинал: «https://dev.to/rocksetcloud/analytics-on-dynamodb-comparing-athena-spark-and-elastic-19b7»