Как работают таблицы разделов DynamoDB?
Документация DynamoDB описывает, как работает разбиение таблиц в принципе, но очень подробно описывает особенности (то есть числа). Как и когда происходит разбиение таблиц DynamoDB?
2 ответа
Я нашел эту презентацию, созданную Риком Хулиханом (главный архитектор решений DynamoDB) из AWS Loft San Franciso 20 января 2016 года.
Презентация также на Youtube.
Этот слайд содержит важную информацию о том, как / когда происходит разбиение таблицы:
И ниже я обобщил уравнение, в которое вы можете вставить свои собственные значения.
Перегородки по вместимости = (RCUs/ 3000) + (WCUs/ 1000)
Разделы по размеру = TableSizeInGB/ 10
Всего разделов = Возьмите самый большой из ваших разделов по емкости и разделов по размеру. Округлите это до целого числа.
Таким образом, раздел может содержать максимум 3000 блоков RCU, 1000 блоков WCU и 10 ГБ данных. После создания разделов RCU, WCU и данные распределяются по ним равномерно.
Обратите внимание, что, насколько мне известно, после создания разделов снижение RCU, WCU и удаление данных не приведет к удалению разделов. У меня в настоящее время нет ссылки на это.
Относительно "удаления перегородок" пункт Стю упоминается.
Вы не можете напрямую контролировать количество разделов, и после создания разделов их невозможно удалить => это может привести к проблемам с производительностью, которые во многих случаях не ожидаются.
Предположим, у вас есть таблица, которой назначено 500WCU. Для этого примера рассмотрим, у вас есть 15 ГБ данных, хранящихся в этой таблице. Это означает, что мы достигли предела размера данных (10 ГБ на раздел), таким образом, в настоящее время у нас есть 2 раздела, между которыми разделены RCU и WCU (каждый раздел может использовать 250WCU).
Вскоре произойдет колоссальный рост (скажем, в Черную пятницу) пользователей, которым необходимо записать данные в таблицу. Так что бы вы сделали, чтобы увеличить WCU до 10000, чтобы справиться с нагрузкой, верно? Ну, что происходит за кулисами, так это то, что DynamoDB достиг другого предела - емкости WCU на раздел (максимум 1000) - поэтому он создает 10 разделов, между которыми данные распределяются с помощью функции хеширования в нашей Таблице.
Когда Черная пятница закончится, вы решите уменьшить WCU до 500, чтобы сэкономить. То, что произойдет, это то, что даже если вы уменьшили WCU, количество разделов не уменьшится => теперь вам нужно РАЗДЕЛИТЬ эти 500 WCU между 10 разделами (так что фактически каждый раздел может использовать только 50WCU).
Вы видите проблему? Это часто забывается и может укусить вас, если вы не планируете должным образом, как данные будут использоваться в вашем приложении.
TLDR: Всегда понимайте, как будут использоваться ваши данные, и правильно планируйте дизайн базы данных.