В нескольких проектах мы должны хранить, агрегировать, оценивать простые значения измерений. Одна строка типично состоит из метки времени, значения и некоторых атрибутов значения. В некоторых приложениях мы хотели бы сохранить 1000 значений в секунду и более. Эти значения должны быть не только вставлены, но и удалены с той же скоростью, поскольку срок службы значения ограничен годом или около того (на разных этапах агрегации мы не храним 1000/с в течение всего года).
До сих пор мы разработали различные решения. Один основан на Firebird, один на Oracle и один на некотором самодельном механизме хранения. Но ни один из них не является очень удовлетворительным решением.
Оба решения RDBMS не могут обрабатывать требуемый поток данных. Кроме того, приложения, которые доставляют значения (например, драйверы устройств), не могут быть легко привязаны к базам данных, инструкции вставки громоздки. И, наконец, при наличии SQL-интерфейса для данных настоятельно необходимо, типичные оценки трудно сформулировать в SQL и замедлить выполнение. Например. найдите максимальное значение с отметкой времени за 15 минут для всех измерений за последний месяц.
Самодельное решение может обрабатывать скорость ввода и имеет клиентский API для этого, но не имеет ничего общего с языком запросов и не может использоваться другими приложениями через некоторый стандартный интерфейс, например. для отчетности.
Лучшим решением в моих мечтах будет система базы данных, которая:
- имеет API для очень быстрой вставки
- способен удалять/усекать значения с той же скоростью
- предоставляет стандартный SQL-интерфейс с конкретной поддержкой типичных данных временных рядов
Знаете ли вы некоторую базу данных, которая приближается к этим требованиям, или вы подойдете к проблеме по-другому?