2015-02-21 4 views
1

Возможно ли сделать заказ, если scanning a таблица DynamoDB, прежде чем получать данные, возвращенные пользователю?Результаты заказа в скане DynamoDB

В SQL можно выполнить запрос, например SELECT * FROM posts ORDER BY creationDate DESC. Можно ли сделать это с помощью scan (или с query, но я не думаю, что это сработает, потому что я не знаю значение ключа хэша) в AWS DynamoDB?

Хотя можно получить все результаты из базы данных, и , то сортировать их, я ожидаю, что там будет много сообщений. Если есть много сообщений, тогда потребуется много времени, потому что я хотел бы загружать только определенное количество сообщений, пока пользователь не решит загрузить больше.

Есть ли способ сортировки результатов по range key, или local or global secondary index?

Я пытаюсь найти взломать обойти тот факт, что, кажется, нет никакого способа, чтобы заказать результаты, а не искать что-то вроде этого:

AWSDynamoDBScanInput.order = NSSortDescriptor(key: "creationDate", ascending: true) 

Если оно не существует, хотя от того, что я смотрел на него, кажется, не представляется возможным.

Похоже, что результаты сортируются по хэш-ключу по умолчанию, поэтому я хотел бы установить хеш-ключ на дату создания элемента с UID для ключа диапазона, но AWS DynamoDB documentation, похоже, предупреждает об этом это:

установка Будет ли хэш-ключ к дате создания:

var creationDate: Int = Int(NSDate().timeIntervalSince1970) 

и ключ диапазона для случайной работы UID сортировать сообщения?

Можно ли заказать результаты, когда scanning a таблица DynamoDB? Установил ли дата создания (как Int) как Хэш-ключ и случайный UID в качестве ключа диапазона? Есть ли (лучше) хаки, которые можно использовать, чтобы обойти тот факт, что DynamoDB не имеет функции сортировки?

ответ

1

Единственный способ сделать это - запросить индекс. Возможно, вам, возможно, придется добавить глобальный вторичный индекс, чтобы «взломать» то, что вы пытаетесь сделать, но это, вероятно, не очень хороший дизайн. Причиной того, что это должен быть Индекс, является то, что Dynamo хранит каждый элемент в хеш в порядке диапазона. Итак, если у вас есть Hash, который вы знали (возможно, добавьте свойство для каждого документа, имеющего такое же значение, и сделайте это Hash Key), тогда он будет сортировать по диапазону (который вы бы поставили на интересующую вас временную метку). Тогда это будет в порядке. Вы можете столкнуться с проблемами с этим, но если, как вы говорите, вы ищете взломать, это должно сработать.

+0

Отлично, спасибо. Это будет довольно масштабное приложение, так вы знаете, насколько важны проблемы? Кроме того, по умолчанию сортировка 'scan' сортируется (как в порядке убывания хеш-ключа), или это просто случайно? – Jojodmo

+1

Сканирование заказов случайным образом. Не планируйте выполнение сканирования в производстве, за исключением целей резервного копирования. Планирование запроса, когда вам нужно искать по ключу, упорядоченному другим полем – Max