Большинство подходов и систем обработки данных, включая SQL и map-reduce, основаны на преобразовании
множеств элементов (таблиц, коллекций и т.п.) Работа с данными представляется как граф операций на множествах, где одно множество определяется и вычисляется из других.
Альтернативный подход использует используют преобразования
колонок (функций). Таким образом, преобразования данных представляются как граф операций с функциями (а не множествами), а каждая функция определяется и во время выполнения вычисляется через другие функции. Сейчас есть три основные операции с колонками:
Calculate — это аналог map или select
Link – это типа join
Accumulate – это аналог reduce или group-by
Например, описание могло бы выглядеть так:
// Определить колонки
col1.calc(...);
col2.link(...);
col3.accu(...);
colN.calc(...);
// Вычислить все колонки
schema.eval();
Здесь каждое определение принимает пользовательскую функцию (как и в map-reduce), а также указатели на другие колонки, данные которых будут исползоваться для вычисления данных данной колонки.
Этот подход реализован с помощью вот этой библиотеки:
Bistro: https://github.com/asavinov/bistro
Она может быть включена в системы где необходима потенциально сложная обработка данных, например, для миграции данных, импорта-экспорта, генерация отчетов, СУБД, анализ потоков и др.
Было бы интересно узнать мнение по поводу этого подхода вообще и его реализации в библиотеке Bistro в частности. Будет ли это вообще работать? Кому и где это могло быть наиболее полезно сейчас и в будущем? Что можно улучшить в данной реализации?
Ранее этот подход был реализован как веб-приложение для работы с таблицами (обсуждение
(Angular 2) Оцените приложение Data Commandr для работы с та):
Data Commandr:
http://dc.conceptoriented.com