Какой самый дешевый способ делать записи, версии и сравнения в AWS? - PullRequest
0 голосов
/ 27 февраля 2020

В настоящее время я использую DynamoDb для хранения JSON объекта, затем, когда происходит обновление объекта, сравните его с тем, что находится в DynamoDB, затем обновите то, что находится в DDB, и верните старую и новую версию как различия.

Я столкнулся с проблемой, когда объект был слишком большим для DDB, поэтому я смотрю на необходимость сохранить его в S3 и, возможно, сохранить путь к файлу в DDB, а когда я делаю diff, потяните файл вниз и сравните его с тем, что у меня есть, и отправьте сравнение. Потом я задумался о том, что у S3 есть версии, и я мог сравнивать версии, но меня больше всего беспокоит стоимость в масштабе. Я нашел статью, рассказывающую о том, что что-либо более 20К дешевле писать / получать доступ в S3, чем в DDB, но ниже, DDB дешевле. Большинство моих объектов 5-10K, так что, кажется, большую часть времени DDB дешевле. Но это также заставило меня задуматься, есть ли лучшее решение для проведения различий между тем, что у меня сейчас есть, и тем, что существовало? Мне не нужно, чтобы куча версий зависала, мне просто нужны текущие и предыдущие версии.

1 Ответ

0 голосов
/ 28 марта 2020

Я бы использовал следующую схему

id    |  hashid      | docPath        | doc(where ever size is<400kb)
123   |  456         | bucket1/123    | {"a":"b"}
122   |  789         | bucket1/122    | 

, когда приходит запрос на запись для do c 123,

  1. получить строку из таблицы с id = 123
  2. Проверьте, совпадает ли хэш существующего do c и нового do c
  3. , если нет, то старый и новый do c совпадают, поэтому не нужно ничего менять.
  4. , если да

    a. если do c присутствует в ответе таблицы

    • вернуть do c как существующее do c

    b. иначе

    • получить do c из s3 с помощью docpath и вернуть do c как существующий do c

    , если новый размер do c <400kb запишите это в Dynamodb и s3, иначе запишите в s3 и просто обновите метаданные в Dynamodb. и сохраните путь s3 в таблице Dynamodb. </p>

Это обеспечит

  1. Для большинства случаев использования (где c подходит в Dynamodb) вы будете выполнять только 1 чтение и запись в Dynamodb, и они будут очень быстрыми.
  2. Для других случаев использования (где c не может поместиться в таблицу Dynamodb) вы будете выполнять 2 операции чтения из DynamodB и S3. только когда это требуется (т.е. документы на самом деле разные).
  3. У вас есть s3 для истории каждого дела c.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...