Лучшая практика архивирования данных в БД Космос - PullRequest
1 голос
/ 15 января 2020

У нас есть требование ежедневно архивировать данные в базе данных Cosmos для ADLS Gen2, я не уверен, что у нас есть для этого наилучшая практика. Коллекция, которую нам нужно архивировать, содержит более 100 миллионов документов каждый день (около 120 тысяч в минуту). Размер документа составляет около 0,5 КБ, а общий размер данных - около 50–60 ГБ. У нас есть только вставка и не обновление документов.

Я могу придумать следующие 2 способа: 1. Используя фабрику данных, чтобы извлекать данные каждый день и копировать их в ADLS Gen2. 2. Используя ленту изменений Cosmos DB для отслеживания любой вставки и вызовите функцию Azure для вставки того же документа в ADLS Gen2.

Я не уверен, каков наш рекомендуемый путь. Из моей проверки оба решения имеют некоторые недостатки. Подключение ADF к базе данных Cosmos кажется нестабильным, если объем данных невелик, он подходит. Когда я пытаюсь загрузить данные документов 100M, всегда происходит сбой при ошибках подключения к данным. Для фида изменений, из-за того, что вставка очень велика, нам может понадобиться вызывать Azure функцию 100M раз в день, это принесет много проблем с затратами клиента, и я не уверен на 100%, если это хороший способ использовать ленту изменений для такого огромного сценария вставки.

Есть ли у нас другие способы архивации данных в базе данных Cosmos?

Спасибо и С уважением,

1 Ответ

1 голос
/ 15 января 2020

Стоимость является приоритетом для вашего описания, поэтому давайте сначала сравним стоимость.

Azure Цена функции: https://azure.microsoft.com/en-us/pricing/details/functions/

enter image description here

Вы сказали 120K данных в минуту, и каждый документ составляет около 0,5K. Это значит, что вы получаете 240 документов в минуту. В течение одного месяца это должно быть около 240*60*24*30 = 10,368,000

Так что вычисление, как показано ниже, просто для справки. Это грубо, потому что время выполнения и память зависят от истинного использования.

enter image description here

Например, если время выполнения функции azure составляет 0.1 секунду, а не 1 секунды. Затем:

enter image description here

цена ADF: https://azure.microsoft.com/en-us/pricing/details/data-factory/data-pipeline/

Вы сказали, что ADF кажется нестабильным, я бы сказал, что это недостаток ADF. ADF - хороший инструмент для данных архивирование. Боюсь, что параллелизм превышает значение по умолчанию DIU . Я бы посоветовал вам попытаться поднять DIU, чтобы повторить попытку.

Моя идея:

По моему опыту, возможно, вам необходимо уделять больше внимания согласованности. Если данные должны архивироваться в режиме реального времени из-за сильной согласованности, вы можете выбрать функцию azure. Наоборот, я настоятельно рекомендую вам обработать ее в пакете. Например, выполнять операцию копирования ADF один раз в день для обработки данных в последний день.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...