Предположим, я являюсь службой подписки, и у меня есть таблица, в каждой строке которой представлены данные клиента.
Я хочу создать систему, которая будет ежедневно обрабатывать данные о клиентах.Этот ежедневный снимок содержит данные всех существующих в настоящее время клиентов (т. Е. Будут строки для новых клиентов и клиентов, которые отписались от подписки, не будут отображаться в этих данных).Мне также необходимо отслеживать продолжительность подписки каждого клиента, используя время начала и окончания.Если клиент повторно подписывается, другая запись этого времени начала и окончания обновляется для этого клиента.Пример записи / схемы показан ниже.
{
"CustomerId": "12345",
"CustomerName": "Bob",
"MagazineName": "DatabaseBoys",
"Gender": "Male",
"Address": "{streetName: \"Sesame Street\", ...}",
"SubscriptionTimeRanges": [{start:12345678, end: 23456789}, {start:34567890, end: 45678901},...]
}
- Я буду обрабатывать> 250 000 строк данных один раз в день , каждый день
- Мне нужночтобы узнать, существует ли какая-либо запись в снимке * в настоящее время в базе данных
- Общий размер таблицы будет> 250 000
- Есть долгосрочные преимуществаэто связано с наличием реляционной базы данных (например, присоединение к другой таблице, содержащей информацию из журнала)
- Я хотел бы получить записи либо по
CustomerId
, либо по MagazineName
- Запись не должначтение блока
- Для этого я предполагаю, что мне потребуется отсканировать всю таблицу, выполнить итерацию по каждой записи и индивидуально обновить
SubscriptionTimeRanges
массив / JSON-блоб каждой записи - Задержка записи составляетне сложное требование, но в то же время я не должен ожидать, что потребуется более часа, чтобы обновить все эти записи (можно ли это сделать за одну транзакцию, если это обновление ...?)
- читает шоуld также быть быстрым
- Параллельная обработка всегда хороша, но что может привести к блокировке для ACID-совместимых БД?
Я знаю, что DynamoDB быстро справится с этим вариантом использования,и схема записи находится прямо на аллее NoSQL.Я могу использовать глобальные вторичные индексы / локальные вторичные индексы, чтобы решить некоторые из моих проблем.У меня есть некоторый опыт работы с PostgreSQL при использовании Redshift, но я в основном имел дело с массовыми вставками без необходимости изменения данных.Теперь мне нужен аспект модификации данных.Я думаю, что RDS Postgres был бы хорош для этого, но хотел бы услышать ваши мысли или мнения.
PS Не принимайте проект системы "подписки" слишком серьезно, это лучший параллельный пример, который я мог бы подуматьпри настройке примера для аналогичных требований ..:)