Как поддерживать согласованность данных при изменении схемы для БД Dynamo

#amazon-dynamodb #aws-amplify #amazon-dynamodb-local

Вопрос:

Я использую AWS Amplify фреймворк, который используется внутри Dynamo DB и всякий раз, когда я:

  1. Измените/Переименуйте или добавьте новое соединение @
  2. Или добавьте или измените любое поле в существующей таблице, которое является ключевыми полями с @connection

Существующая таблица, содержащая данные, не отражает того же самого, особенно для Многих-многих сценариев. Во время локальной работы со amplify mock мной у меня есть обходной путь удаления файла .db внутри mock-data/dynamodb папки и повторной загрузки всех данных. Это работает, но не является хорошим решением для производства!

Примеры: Рассмотрение простого сценария «Многие ко многим»

 type Group @model{
id: ID!
subscribers: [GroupMaster] @connection(keyName: "byGroupSubscriber", fields: ["id"])
}

type User @model{
id: ID!
subscribedTo: [GroupSubscriber] @connection(keyName: "byUserSubscriber", fields: ["id"])
}

type GroupSubscriber @model
@key(name: "byGroupSubscriber", fields: ["groupID", "subscriberID"])
@key(name: "byUserSubscriber", fields: ["subscriberID", "groupID"]) {  
  {
  id: ID!
  groupID: ID!
  subscriberID: ID!
  group: Group! @connection(fields: ["groupID"])
  subscriber: User! @connection(fields: ["subscriberID"])
}
 

Здесь, если данные существуют как в таблице групп, так и в таблице пользователей, и я изменяю написание ключа в @connection, скажем byGroupSubscriber , с byGroupSubscriberNewKeyName

И сохраните новые изменения, затем amplify mock создадите новые файлы изменений, но когда я вставляю новые GroupSubscriber данные, новым вставленным данным IndexKey_0 присваивается значение null, что означает, что они не могут использовать ключи для связи с группой! (как показано на скриншоте ниже)

Мой вопрос заключается в том, возникнет ли эта проблема в рабочих таблицах в реальном времени и как тогда поддерживать согласованность данных в этих сценариях?

[ Ниже приведен скриншот того, как GroupSubscriber будут выглядеть данные в таблице при вставке данных после изменения только имени ключа, который связывает Group ]:

введите описание изображения здесь