Как подружить react с динамически связанными объектами?
Господа, есть необходимость переписать фронт-енд приложения.
Базовый функционал хорошо ложиться на redux, flux, reflux, но есть один важный модуль, в котором куча классов, связанных динамически, то есть состояние не возможно описать в виде простого статического объекта, что не позволяет использовать immutable-js.
Что посоветуете?
Не использовать иммутабельность и соответствующие библиотеки, писать свой велосипед похожий на Redux?
Представьте реляционную модель данных, некий граф. Структура данных очень похожа.
Но все это хранится в памяти, например, имеем несколько таблиц в памяти.
Таблицы могут быть связаны между собой по паре полей.
Допустим, есть 3 таблицы. Т1(100 строк), Т2 (1000 строк), Т3(10000 строк).
Эти три таблицы связаны между собой слева направо, один ко многим Т1 -> Т2 -> Т3.
Каждой записи из Т1 соответствует несколько записей из Т2 и еще больше из Т3 (через Т2).
Теперь мне нужно посчитать для каждой строки из Т1 по такой формуле: SUM(Т3.F2)/AVG(Т2.F1), где Fn - имя колонки из которой брать данные, а данные передаваемые в функции это числовые массивы полученные из этих полей соотв-щих таблиц.
Для поиска связанных данных использовать переборы плохо, всегда будет N1*N2*...*Nx переборов, где Nn количество записей в таблицах, которые участвуют в выборке данных.
Строить индексы можно, либо один раз пройтись по всем связям и для каждой записи сохранить ссылки на соотв-щие связанные строки в связанных таблицах, что и сделано, работает быстро. Получить связанные строки из соседней таблицы можно просто вернув уже заранее сформированный массив этих строк, по сути указателей, который хранится в каждой строке текущей таблицы.
На вопрос "Почему не использовать субд?", отвечу, что субд так же быстро не будет работать, так как данные вытаскиваться сложными запросами, которые и без того работают не так быстро как хочется, а так же данные могут выбираться из разных источников, не только субд, это может быть сторонний микросервис.
На вопрос "Какого хрена вы храните данные в браузере?" )) ответ - данных в итоге не так много, чтобы не помещалось в браузере с 2-4 ГБ оперативки, но достаточно, чтобы ощутить тормоза при большом количестве переборов, или же хранить мутации в Redux.
То есть по сути задачу модуль свою решает, но это только часть системы, которую нужно переписать с использованием современных инструментов, react/vue, остальная часть системы это набор каталогов/списков/форм редактирования итп.