Как работают таблицы разделов 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: Всегда понимайте, как будут использоваться ваши данные, и правильно планируйте дизайн базы данных.

Другие вопросы по тегам