2013-04-01 3 views
6

Я использую таблицы DynamoDB с ключами и пропускную способность, оптимизированную для приложений. Чтобы поддерживать другие административные и отчетные случаи использования ad hoc, я хочу сохранить полную резервную копию в S3 (дневная резервная копия в порядке). Опять же, я не могу позволить себе сканировать все таблицы DynamoDB для резервного копирования. Ключи у меня недостаточно, чтобы узнать, что такое «новое». Как сделать инкрементное резервное копирование? Нужно ли мне модифицировать мою схему DynamoDB или добавлять дополнительные таблицы только для этого? Любые лучшие практики?DynamoDB - Как сделать инкрементную резервную копию?

Обновление: DynamoDB Streams решает эту проблему.

DynamoDB Потоки захватывает последовательность элемента уровня модификаций в любой таблице DynamoDB, и хранит эту информацию в журнале в течение до 24 часов по времени заказал. Приложения могут получить доступ к этому журналу и просмотреть элементы данных , как они появились до и после их изменения, в вблизи реального времени.

+0

Как вы читаете осколки? И как вы гарантируете, что осколок не будет дважды читаться? – bpavlov

ответ

5

Я вижу два варианта:

  1. Сформировать текущий снимок. Вам нужно будет прочитать из таблицы, чтобы сделать это, что вы можете сделать очень медленно, чтобы оставаться под ограничениями по производительности (Scan). Затем сохраните список обновлений в памяти, выполненный в течение некоторого периода времени. Вы можете поместить их в другой стол, но вам также придется прочитать те, которые, вероятно, стоили бы столько же. Этот временной интервал может составлять минуту, 10 минут, час, что бы вы ни потеряли, если ваше приложение выйдет. Затем периодически захватывайте снимок с S3, воспроизводите эти изменения в снимке и загружайте свой новый снимок. Я не знаю, насколько велик ваш набор данных, поэтому это может быть непрактичным, но я видел, как это сделано с большим успехом для наборов данных до 1-2 ГБ.

  2. Добавить пропускную способность и резервное копирование данных с помощью полного сканирования каждый день. Вы говорите, что не можете себе это позволить, но неясно, имеете ли вы в виду оплату за пропускную способность или что сканирование будет использовать всю емкость, и приложение начнет сбой. Единственный способ вытащить данные из DynamoDB - это прочитать или сильно или в конечном итоге последовательный. Если резервная копия является частью ваших бизнес-требований, я думаю, вам нужно определить, стоит ли она. Ваши результаты можно прочитать самостоятельно, изучив свойство ConsumedCapacityUnits. Операция Scan имеет свойство Limit, которое вы можете использовать для ограничения количества данных, считываемых в каждой операции. Scan также использует в конечном итоге последовательные чтения, которые составляют половину цены на строго согласованные чтения.

+0

Вариант 2 (полное сканирование каждый день) может оказаться нежизнеспособным по мере роста данных. Я бы предпочел вариант 1. Я готов потратить на минимальные дополнительные таблицы и емкость, необходимые для включения резервного копирования. Теперь, следующий вопрос: какой лучший способ воспроизвести изменения в моментальном снимке (в основном это CSV или JSON)? Должен ли я загружать снимок в некоторую локальную базу данных, запускать повтор и затем сохранять новый снимок? –

+0

Размер моих данных сейчас близок к 1 ГБ, но я хочу быть готовым к значительному росту. –

+0

Я думал о обработке в памяти, поэтому размер данных, которые вы можете обрабатывать с помощью моментального снимка, ограничен тем, что вы можете поместить в память. Уничтожьте свой последний снимок в коллекцию объектов, примените обновления и повторите попытку. Подумайте о разделении моментального снимка по мере роста ваших данных (или с помощью другого БД). Если вам нужно обновить раздел, потому что ваши данные растут, другие части ваших отчетов также должны это признать. –

3

Теперь вы можете использовать потоки dynamoDB, чтобы данные сохранялись в таблице anthother или поддерживали другую копию данных в другом хранилище данных.

https://aws.amazon.com/blogs/aws/dynamodb-streams-preview/

+1

Добро пожаловать в переполнение стека! Хотя это может ответить на вопрос, [было бы предпочтительнее] (http://meta.stackoverflow.com/q/8259), чтобы включить здесь основные части ответа и предоставить ссылку для справки. –

0

операция сканирования в DynamoDB возвращает строки, упорядоченные по первичному ключу (хэш-ключ). Поэтому, если хэш-ключ таблицы является автоматически увеличивающимся целым числом, тогда установите хеш-ключ последней записи, сохраненной во время предыдущей резервной копии, как параметр «lastEvaluatedKey» для запроса сканирования при выполнении следующей резервной копии, и сканирование вернет записи, которые имеют создается только с момента последней резервной копии.

3

Для инкрементного резервного копирования, вы можете связать свой DynamoDB поток с функцией Lambda для автоматического запуска кода для каждого обновления данных (т.е. данные в другой магазин, как S3)

Функция лямбды вы можете использовать, чтобы связать с DynamoDb для инкрементного резервного копирования:

https://github.com/PageUpPeopleOrg/dynamodb-replicator

Я предоставил подробную прогулку через о том, как вы можете использовать DynamoDB Streams, Lambda и S3 версированы ведра создавать инкрементные резервные копии ваших данных в DynamoDb на моем блоге:

https://www.abhayachauhan.com/category/aws/dynamodb/dynamodb-backups

В качестве альтернативы, DynamoDB только что осуществил резервное копирование и восстановление по требованию. Они не являются инкрементальными, а полностью резервными моментальными снимками.

Отъезд https://www.abhayachauhan.com/2017/12/dynamodb-scheduling-on-demand-backups/ для получения дополнительной информации.

НТНА

1

29 ноября 2017 On-Demand было введено резервное копирование. Он позволяет создавать резервные копии непосредственно в DynamoDB практически мгновенно, не потребляя никакой емкости. Вот несколько отрывков из blog post:

Эта функция предназначена, чтобы помочь вам соответствовать нормативным требованиям для долгосрочного архивирования и хранения данных. Вы можете создать резервную копию кликом (или вызовом API) без использования вашей пропускной способности или повлиять на отзывчивость вашего приложения. Резервные копии хранятся очень долговечно и могут использоваться для создания свежих таблиц.

...

Резервная копия доступна прямо сейчас! Он зашифрован с помощью управляемого Amazon ключа и включает в себя все данные таблицы, настроенные параметры емкости, настройки локального и глобального вторичного индекса и потоки. Он не включает автоматическое масштабирование или TTL-настройки, теги, политики IAM, метрики CloudWatch или сигналы CloudWatch.

Возможно, вам интересно, как эта операция может быть мгновенной, учитывая, что у некоторых наших клиентов есть таблицы, приближающиеся к половине петабайта. За кулисами DynamoDB производит полные снимки и сохраняет все журналы изменений. Выполнение резервного копирования так же просто, как сохранение временной метки вместе с текущими метаданными для таблицы.

Смежные вопросы