IBM Cloudant DB - получить исторические данные - лучший способ?

Я довольно озадачен относительно этой модной вещи под названием NoSQL, особенно CloudantDB от Bluemix. Как вы знаете, эта БД не хранит значения в хронологическом порядке. Задача программиста - сортировать записи на тот случай, если он хочет, чтобы данные... ну... были отсортированы.

То, что я пытаюсь достичь, - это просто получить последние, скажем, 100 значений, которые датчик отправил в Watson IoT (который сохраняет все в подключенной CloudantDB) упорядоченным способом. В конце было бы неплохо показать их в виде графика в стиле D3.css, но это еще одна задача. Сначала мне нужны значения в упорядоченном массиве.

Что я пробовал до сих пор: я использовал curl для получения данных через PHP с https://averylongid-bluemix.cloudant.com/iotp_orgID_iotdb_2018-01-25/_all_docs?limit=20&include_docs=true';

Я получаю несортированный массив из 20 записей строк со случайными временными метками. Последние 20 записей в БД. Но не с точки зрения временных меток.

Мой вопрос сейчас: знаете ли вы, как получить "последние" 20 записей? Сортировка по отметке времени? Я сделал POST-запрос со строкой JSON, где я хотел, чтобы данные сортировались по отметке времени, но это не работает, возможно из-за строки отметки времени ISO.

Действительно ли мне нужно написать сценарий javascript или PHP, чтобы получить ВСЕ записи базы данных, а затем найти 20 или 100 последних записей, проанализировав временную метку, снова отсортировав массив и затем получив (теперь действительно) последние записи? Я не могу в это поверить.

Спасибо заранее!

2 ответа

Я наконец узнал, как получить данные в хорошем упорядоченном виде. Ключ в том, чтобы использовать _design api вместе с _view api.

Таким образом, запрос curl со следующими URL / атрибутами и строкой запроса выполнил свою работу:

https://alphanumerical_something-bluemix.cloudant.com/iotp_orgID_iotdb_2018-01-25/_design/iotp/_view/by-date?limit=120&q=name:%27timestamp%27

В результате скручивания я получаю первые (по времени) 120 записей. Мне просто нужно выяснить, как получить последние записи, но это уже довольно хороший результат. Теперь я могу передать данные на хороший график JS и отобразить его.

Одним из вариантов может быть включение метки времени как части идентификатора. Запрос _all_docs возвращает документы в порядке по идентификатору.

Если этот подход не работает для вас, вы можете посмотреть на создание вторичного индекса на основе поля метки времени. Одним из типов индекса является Cloudant Query:

Облачный запрос позволяет указать аргумент сортировки:

Другой подход, который может быть полезен для вас, - это _changes api:

API изменений позволяет вам получать непрерывный поток изменений в вашей базе данных. Вы можете добавить эти изменения, например, в график D3.

Другие вопросы по тегам