Мой друг Роберт Ходжес на днях опубликовал
статью про репликацию из OLTP в OLAP базу данных, которую его компания построила на своем продукте Tungsten. Самое интересное, это преобразование данных, которое происходит в процессе репликации.
Обычный подход к репликации -- это синхронизация бинарного лога одной базы данных с другой. В бинарном логе строго последовательно записываются все операции, которые модифицируют данные. Если его "проиграть" на другой систему с той же начальной точки, то должно получиться точно такое же состояние данных, как и на исходной. Причем "проигрывание" происходит по одной операции или по одной транзакции, то есть очень маленькими кусочками.
Такой подход не работает с OLAP-специфичными, и особенно, колонко-ориентированными базами данных (то есть такими, которые хранят данные физически не по строкам, а по колонкам). Такие базы данных оптимизированы на запись, чтение и сортировку больших массивов данных, что типично для аналитических задач, но не на маленькие атомарные операции. Хуже всего с изменением данных. То есть SQL оператор UPDATE, конечно, есть, но на физическом уровне он, как правило, транслируется в то, что обновляемая запись помечается как удаленная, и вместо нее вставляется измененная копия. Потом, когда-нибудь "сборщик мусора" перетрясет таблицу и удаленные записи удалятся навсегда.
Роберт предложил, как мне кажется, новый, хотя и естественный подход к решению проблемы репликации данных для таких случаев. Бинарный лог преобразуется в последовательность частично упорядоченных множеств операций типа delete/insert для каждой таблицы, причем, так как это множество, то "одинаковые" операции достаточно сделать один раз. Что это дает? Это дает максимально эффективный с точки зрения OLAP базы способ изменения данных: сначала "прогоняются" все delete, а потом одним куском для каждой таблицы -- все insert, что можно сделать очень эффективно через операторы пакетной загрузки данных. То есть строго упорядоченная линейная последовательность преобразуется в частично упорядоченное множество (в последовательность частично упорядоченных множеств). В этом фундаментальный смысл.
Теория множеств и бинарных отношений вдруг неожиданным образом всплыла в базах данных. Можно ли из этого получить какие-нибудь интересные следствия -- пока не знаю.