Классика баз данных - статьи

       

Правильные примитивы


В SQL-ориентированных системах имеется сложная система агрегации, которая позволяет пользователю производить статистические вычисления над группами записей таблицы, хранящейся в базе данных. Стандартным примером является следующий:

Select avg (salary) From employee Group by department

При достижении последней записи таблицы обработчик запроса может инициировать агрегатные вычисления для каждой группы записей. Однако эта конструкция не слишком полезна для потоковых приложений, в которых потоки существуют бесконечно, и отсутствует понятие «конца таблицы».

Поэтому в системах обработки потоковых данных SQL (или какой-либо другой язык с поддержкой агрегации) расширяется понятием временного окна. В StreamBase окна можно определять на основе датчика времени, числа сообщений или контрольных точек некоторого другого атрибута. В приложении Feed Alarm (рис. 3) крайний слева блок в каждом потоке является таким блоком агрегации. В этом блоке агрегации акции группируются по символам, а затем для каждой акции определяются окна на основе пар отметок 1 и 2, 2 и 3, 3 и 4 и т.д. Такие «скользящие окна» («sliding windows») часто оказываются очень полезными в приложениях реального времени.

Кроме того, в StreamBase агрегаты конструируются в расчете на интеллектуальную обработку запаздывающих, нарушающих порядок или теряющихся сообщений. В приложении Feed Alarm заказчиков в основном интересовали запаздывающие данные. В StreamBase у агрегатов над окнами может иметься два дополнительных параметра. Первый параметр – это значение таймаута; это параметр заставляет StreamBase закрыть окно и выдать значение, даже если условие закрытия окна не было выполнено. Этот параметр позволяет эффективно обрабатывать запаздывающие или теряющиеся сообщения. Второй параметр – это резервный интервал времени, в течение которого окно остается открытым после выполнения условия его закрытия. Этот параметр дает возможность реагировать на нарушение порядка поступления сообщений.

Содержание  Назад  Вперед