Мне нужно создать базу данных временных рядов и выполнить следующие задачи:
- создавать новые временные ряды
- обновить существующие временные ряды
- запросить один или несколько временных рядов одновременно (например, все временные ряды для одной и той же даты и т. д.)
Монго адаптирован к этому, и если да, то как мне структурировать базу данных? (одна серия времени = один документ? Или один документ = одна запись серии времени, и все эти документы образуют коллекцию, которая представляет собой весь временной ряд?)
Я немного растерялся, и мне трудно найти какую-либо информацию, так как обычно Mongo представляется очень гибким, поэтому у пользователя есть выбор в инфраструктуре.
Любая ссылка на учебник, который конкретно объясняет, как управлять временными рядами в Mongo, очень приветствуется.
Спасибо!
Ответы:
Я предлагаю одну запись временного ряда для каждого документа. Есть несколько проблем с хранением нескольких записей в документе:
Также обратите внимание, что временная метка встроена в стандартный идентификатор объекта MongoDB . Вы можете использовать это, если точность временного ряда меньше одной секунды.
Вот пример документа BSON из библиотеки регистрации событий, которая использует MongoDB :
Поскольку журнал событий похож на временной ряд, возможно, стоит изучить остальную часть кода . Существуют версии на Java, C #, PHP и Python.
Вот еще один похожий проект с открытым исходным кодом: Zarkov
[обновление] В ответ на комментарий @ RockScience я добавил еще несколько ссылок:
источник
Я нашел этот вопрос в SO ( /programming/4814167/storing-time-series-data-relational-or-non ), где OP спрашивает, как хранить временные ряды. Хотя его вопрос в большей степени основан на использовании базы данных NoSQL или RDBMS, и вы, кажется, довольно настроены на использование базы данных NoSQL.
Также найдена эта статья на тему « Уникальные требования к базе данных временных рядов », которая может оказаться полезной.
Надеюсь это поможет.
источник
Да, безусловно, база данных NoSQL лучше подходит для хранения данных временных рядов, чем традиционная СУБД.
Да, MongoDB исключительно адаптирован для этого варианта использования.
-Как вы должны структурировать базу данных? Один документ = один входной ряд временного ряда против нескольких временных рядов.
Ответ - хранить в одном документе несколько временных рядов. Наличие меньшего количества документов поможет производительности с меньшим количеством чтений. Одна хитрость заключается в том, чтобы подготовить ваш документ с предопределенными значениями. Это оптимизирует обновление документа, избегая заполнения записей .
Вот пример схемы о том, как оптимально хранить ряды часовых рядов с минутным интервалом:
Вы инициируете его с 0 значениями, и тогда обновления будут оптимизированы. Чтения оптимизированы, потому что один документ читается вместо 60. Если вам нужно хранить данные за день или месяц, вы используете ту же технику, вы поймете идею.
Вот ссылка на учебник, который конкретно объясняет, как управлять временными рядами в MongoDb из официального блога MongoDb: http://blog.mongodb.org/post/65517193370/schema-design-for-time-series-data-in- MongoDB
источник