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 / атрибутами и строкой запроса выполнил свою работу:
В результате скручивания я получаю первые (по времени) 120 записей. Мне просто нужно выяснить, как получить последние записи, но это уже довольно хороший результат. Теперь я могу передать данные на хороший график JS и отобразить его.
Одним из вариантов может быть включение метки времени как части идентификатора. Запрос _all_docs возвращает документы в порядке по идентификатору.
Если этот подход не работает для вас, вы можете посмотреть на создание вторичного индекса на основе поля метки времени. Одним из типов индекса является Cloudant Query:
Облачный запрос позволяет указать аргумент сортировки:
Другой подход, который может быть полезен для вас, - это _changes api:
API изменений позволяет вам получать непрерывный поток изменений в вашей базе данных. Вы можете добавить эти изменения, например, в график D3.