Как я могу получить предметы из DynamoDB в обратном хронологическом порядке? - PullRequest
0 голосов
/ 20 декабря 2018

Я использую Javascript AWS SDK для запроса таблицы DynamoDB.

У меня есть таблица, в которой хранятся «приложения».У каждого приложения есть первичный ключ (хэш-ключ?) id.

. Каждый элемент также хранит applicationTime в виде строки даты и времени, например 2018-05-21T19:22:50.884Z.

.чтобы вернуть десять последних приложений, основанных на applicationTime.

Пока что у меня есть:

db.batchGet({
    TableName: 'Applications',
    Limit: 10,
    ScanIndexForward: false,
}, (err, data ) => {
        err ? console.log(err, err.stack) : console.log(data)
})

Документация не очень удобна для новичков и, похоже, предложить , что мне может понадобиться локальный вторичный индекс для сортировки по applicationTime.

Однако совершенно очевидно, что создание локального вторичного индекса возможно только при первоначальном создании таблицы.Это производственная база данных, поэтому очень стараюсь не переделывать таблицу.

Это нелепо сложно по сравнению с любым другим продуктом базы данных, который я использовал (SQL и noSQL).

Конечно, яотсутствует что-то очевидное?

PS.Это для инструмента, ориентированного на администратора, который будет видеть только случайное использование, а не как ключевую функцию, ориентированную на пользователя, поэтому я соглашусь на неэффективное решение (например, сканирование), если это единственный вариант.

1 Ответ

0 голосов
/ 21 декабря 2018

Вы правы, вы не можете использовать локальные индексы, так как они создаются во время создания таблицы.Итак, вы можете выбрать глобальный индекс или сканирование.

Сканирование

Это просто.Сортировка для сканирования не поддерживается, поэтому вы просто получаете все данные и сортируете их в приложении.

GSI

Наличие индекса упрощает задачу.Вопрос только в том, какую пару хеш / сортировка использовать?В соответствии с замечательным руководством «Рекомендации по обработке данных временных рядов в DynamoDB» вы можете сделать трюк и разбить дату на пару даты и времени, а затем использовать дату в качестве ключа хеширования и время в качестве ключа сортировки.Для этого потребуются изменения в applicationTime обработке частей вашего приложения, но это влияние не кажется ужасающим.Затем вы можете использовать запросы по этому индексу, чтобы получить последние приложения.Но если у вас менее 10 приложений в день, вам нужно будет выполнить несколько запросов.


Это нелепо сложно по сравнению с любым другим продуктом баз данных, который я использовал (SQL иnoSQL).

Это правда!

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