Скажем, у меня есть таблица "message" с 2 вторичными индексами:
- "recipient_id"
- "sender_id"
Я хочу разделить таблицу «message» на «receient_id». Таким образом, чтобы получить все сообщения, отправленные определенному получателю, мне нужно запросить только один шард.
Но в то же время я хочу сделать запрос, который запрашивает все сообщения, отправленные определенным отправителем. Теперь я не хочу отправлять этот запрос всем частям таблицы «message». Один из способов сделать это - продублировать данные и создать для таблицы «message_by_sender» значение «sender_id».
Проблема этого подхода заключается в том, что каждый раз, когда сообщение отправляется, мне нужно вставить сообщение в таблицы «message» и «message_by_sender».
Но что если после вставки в «message» вставка в «message_by_sender» завершится неудачно? В этом случае сообщение существует в «message», но не в «message_by_sender».
Как мне убедиться, что если сообщение существует в "message", то оно также существует в "message_by_sender", не прибегая к двухфазной фиксации?
Это должно быть очень распространенной проблемой для тех, кто осматривает свои базы данных. Как вы справляетесь с этим?