Для запроса данных в этом примере можно извлекать записи по ключу. Обратите внимание, что большинство документных баз данных также поддерживают создание индексов и таблиц поиска, что позволяет извлекать документы по конкретным свойствам. Это часто бесценно в разработке приложений, когда нужно искать документы различными способами. Например, можно установить индекс на имя.
Ещё один важный технический момент для инженеров данных заключается в том, что документные хранилища, как правило, не соответствуют принципам ACID, в отличие от реляционных баз данных. Техническая экспертиза в конкретном документном хранилище необходима для понимания производительности, настройки, конфигурации, связанных эффектов на записи, согласованности, долговечности и т.д. Например, многие документные хранилища обеспечивают конечную согласованность. Разрешение распределения данных по кластеру способствует масштабированию и производительности, но может привести к катастрофам, если инженеры и разработчики не понимают последствий.
Для выполнения аналитики на документных хранилищах инженерам, как правило, нужно выполнять полное сканирование для извлечения всех данных из коллекции или использовать стратегию CDC для отправки событий в целевой поток. Полное сканирование может иметь как производительные, так и финансовые последствия. Сканирование часто замедляет базу данных по мере выполнения, и многие облачные сервисы без сервера взимают значительную плату за каждое полное сканирование. В документных базах данных часто полезно создать индекс для ускорения запросов. Мы обсуждаем индексы и шаблоны запросов в Главе 8.
Ширококолоночные базы данных. Ширококолоночная база данных оптимизирована для хранения огромных объёмов данных с высокими транзакционными скоростями и чрезвычайно низкой задержкой. Эти базы данных могут масштабироваться до очень высоких скоростей записи и огромных объёмов данных. В частности, ширококолоночные базы данных могут поддерживать петабайты данных, миллионы запросов в секунду и задержку менее 10 мс. Эти характеристики сделали ширококолоночные базы данных популярными в электронной коммерции, финтехе, рекламных технологиях, Интернете вещей и приложениях для реального времени.
Инженеры данных должны быть осведомлены об операционных характеристиках ширококолоночных баз данных, с которыми они работают, чтобы настроить подходящую конфигурацию, спроектировать схему и выбрать соответствующий ключ строки для оптимизации производительности и избежания распространённых операционных проблем.
Эти базы данных поддерживают быстрое сканирование огромных объёмов данных, но не поддерживают сложные запросы. У них есть только один индекс (ключ строки) для поиска. Инженерам данных обычно приходится извлекать данные и отправлять их во вторичную аналитическую систему для выполнения сложных запросов, чтобы справиться с этими ограничениями. Это можно сделать, выполняя большие сканирования для извлечения данных или используя CDC для захвата потока событий.
Графовые базы данных. Графовые базы данных явно хранят данные с математической структурой графа (в виде набора узлов и рёбер).
Neo4j стала чрезвычайно популярной, в то время как Amazon, Oracle и другие поставщики предлагают свои продукты графовых баз данных. Грубо говоря, графовые базы данных хорошо подходят, когда вы хотите анализировать связи между элементами.
Например, вы могли бы использовать документную базу данных для хранения одного документа для каждого пользователя, описывающего их свойства. Вы могли бы добавить элемент массива для связей, который содержит идентификаторы прямо связанных пользователей в контексте социальных сетей. Довольно легко определить количество прямых связей у пользователя, но предположим, вы хотите узнать, сколько пользователей можно достичь, пройдя через две прямые связи.
Вы могли бы ответить на этот вопрос, написав сложный код, но каждый запрос будет выполняться медленно и потреблять значительные ресурсы. Документное хранилище просто не оптимизировано для этого случая использования.
Графовые базы данных разработаны именно для такого типа запросов. Их структуры данных позволяют выполнять запросы на основе связей между элементами; графовые базы данных показаны, когда нам важно понимать сложные траверсы между элементами. В терминологии графов мы храним узлы (пользователи в предыдущем примере) и рёбра (связи между пользователями). Графовые базы данных поддерживают богатые модели данных как для узлов, так и для рёбер. В зависимости от используемого движка графовой базы данных, графовые базы данных используют специализированные языки запросов, такие как SPARQL, Resource Description Framework (RDF), Graph Query Language (GQL) и Cypher.
В качестве примера графа рассмотрим сеть из четырёх пользователей. Пользователь 1 подписан на Пользователя 2, который подписан на Пользователя 3 и Пользователя 4; Пользователь 3 также подписан на Пользователя 4 (Рисунок 5-8).