Механика внесения моделей в БД#
При старте модуля mp_calc_models определяется, какие поля и в каком виде должны храниться в БД. Общий контекст этой схемы описан в статье о структуре БД marketpawns, в разделе mp_models и группа связанных таблиц.
$nativeFieldsизmp_define.php— это список полей модели, которые хранятся не вparam, а в «родном» виде прямо в записи модели.- Список полей, которые реально присутствуют в
mp_models, определяется запросом к БД и сохраняется в массиве$columnsInModels. $servColumnsизmp_define.php— это служебные поляmp_models, не формируемые алгоритмами I и II, напримерid,pair_id,tf,updated,arc.$externBranchesизmp_define.php— это дополнительные ветки модели, такие какLevels,clusterParamsиmodelScores, которые хранятся отдельно вmp_add_branches.
На основе этих массивов выполняется распределение информации: система определяет, какие поля нужно сохранять в mp_models, какие — во внешних ветках, а какие — в упакованном виде.
Ключевая идея подхода — убрать прямые команды insert и update из основного тела программы. Все взаимодействие с БД вынесено во внешние функции:
complementModel— поidмодели читает и распаковывает всю необходимую информацию;insertModelIntoDB— сохраняет новую модель в БД;updateModelInDB— обновляет уже существующую модель.
Преимущество такого подхода в том, что схему хранения можно менять без вмешательства в основную бизнес-логику. Например, если часть полей, которые сейчас хранятся в упакованном виде, позже потребуется вынести в отдельные таблицы, изменения будут локализованы в DB-слое. Благодаря этому и обновления выполняются точечно: например, при проверке Broadcast в check_new_models можно обновлять только дополнительные ветки ответов нейронок и отчетов по кластерам, не переписывая всю модель целиком.