Структура таблицы AWS DynamoDB - PullRequest
0 голосов
/ 13 апреля 2019

Я создаю криптовалютного бота и мне нужно хранить его историю торговли в каком-то месте. Поскольку AWS DynamoDB можно использовать в определенной степени, я думаю, что он может удовлетворить мои потребности, но у меня есть некоторые проблемы, связанные со структурой таблицы.

Каждая сделка имеет следующие атрибуты:

  • символ криптовалюты
  • идентификатор сделки, предоставляемый биржей криптовалюты (он уникален только в сочетании с символом криптовалюты, то есть символ A может иметь идентификатор сделки 1000, а символ B также может иметь идентификатор сделки 1000)
  • время, когда была совершена сделка (несколько сделок могут происходить одновременно)
  • цена
  • количество

И каждый день я планирую сделать 1 запрос на выборку для последних 200 элементов, отсортированных по time, а также около 50 новых вставок.

Из того, что я прочитал, в таблице должен быть уникальный первичный ключ, поэтому я использовал cryptocurrency symbol в качестве ключа раздела и trade id в качестве ключа сортировки, поскольку оба они обеспечивают уникальность, но если я не ошибаюсь, эта настройка не позволяет мне сортировать данные по time.

Одно из решений, которое я могу придумать, - генерировать новые и совершенно уникальные trade ids самостоятельно и не полагаться на trade ids, предоставляемый exchange, а затем использовать time в качестве ключа сортировки, но я бы хотел этого избежать .

Может быть, есть лучший способ сделать это?

1 Ответ

0 голосов
/ 14 апреля 2019

Вы должны использовать symbol и tradeId в качестве первичного ключа, а для запроса по дате вы можете создать GSI с yyyy-mm-dd в качестве ключа раздела и hh:mm:ss (или полной отметкой времени, если хотите) в качествеключ сортировки.Поскольку вы делаете 50 вставок в день, вы можете даже использовать yyyy-mm в качестве ключа раздела GSI.

Чтобы выбрать последние 200, вы запрашиваете GSI с ключевым условным выражением yyyymmdd = :today, сортировка = убывание, ограничение 200. Если вы получите менее 200 результатов, повторите запрос за предыдущий день.,Если у вас осталось менее 200 результатов, продолжайте запрашивать один день за раз, пока не получите нужный номер.(Если вы решите использовать yyyy-mm в качестве ключа раздела GSI, адаптируйте эту стратегию, чтобы использовать месяцы вместо дней.)

Извлеките этот ответ на связанный вопрос, который имеет некоторыеподробнее об этом подходе.

Этот подход может не очень хорошо масштабируется, но, поскольку вы пытаетесь остаться в пределах бесплатного уровня DynamoDB, вам, вероятно, не нужно беспокоиться о масштабируемости,

Теперь, если вас совсем не интересуют лучшие практики, просто используйте yyyy-mm-dd в качестве ключа раздела главной таблицы, а затем используйте hh:mm:ss:symbol:tradeId в качестве ключа сортировки.Вы сможете запросить основную таблицу по дате (но не по чему-либо еще).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...