Phistory to archive: различия между версиями
Материал из MajorDoMo инфо
Xor (обсуждение | вклад) |
Xor (обсуждение | вклад) |
||
Строка 28: | Строка 28: | ||
//из php-скрипта, например, так. База создается с умолчаниями. | //из php-скрипта, например, так. База создается с умолчаниями. | ||
//При необходимости, подправить CHARACTER SET, COLLATE и права | //При необходимости, подправить CHARACTER SET, COLLATE и права | ||
sqlExec("CREATE DATABASE IF NOT EXISTS | sqlExec("CREATE DATABASE IF NOT EXISTS archive"); | ||
</pre> | </pre> | ||
Версия от 13:09, 26 апреля 2020
Из телеграмчата от пользователя XOR
Описание
Для ускорения работы MajorDoMo, есть смысл перенести таблицу phistory "боевой" (читай основной рабочей) базы в таблицу отдельно созданной базы, для истории или анализа сторонними методами. Приведенный ниже код переносит данные, старше 2-х месяцев, из таблицы phistory боевой базы в таблицу history таблицы archive.
Все работы проводим на свой страх и риск в phpmyadmin. Возможно позже появится что-то автоматизированное.
Внимание!!! лучше сначала не удаляйте из боя, убедитесь, что база создана, с нужной кодировкой и правами. создайте там таблицу, наполните данными, посмотрите, что всё в порядке. а потом можно и чистить бой.
Создаем "вьюху"
CREATE OR REPLACE VIEW vw_clobjpr AS select `v`.`ID` AS `value_id`,`v`.`PROPERTY_ID` AS `PROPERTY_ID`,`v`.`PROPERTY_NAME` AS `PROPERTY_NAME`,`v`.`UPDATED` AS `UPDATED`, `v`.`VALUE` AS `VALUE`,`p`.`TITLE` AS `property`, `o`.`TITLE` AS `object`,`c`.`TITLE` AS `class`,`cp`.`TITLE` AS `class_parent`,`cpp`.`TITLE` AS `class_pparent` from (((((`pvalues` `v` join `properties` `p` on((`v`.`PROPERTY_ID` = `p`.`ID`))) join `objects` `o` on((`v`.`OBJECT_ID` = `o`.`ID`))) left join `classes` `c` on((`o`.`CLASS_ID` = `c`.`ID`))) left join `classes` `cp` on((`c`.`PARENT_ID` = `cp`.`ID`))) left join `classes` `cpp` on((`cp`.`PARENT_ID` = `cpp`.`ID`)))
Создаем базу
//из php-скрипта, например, так. База создается с умолчаниями. //При необходимости, подправить CHARACTER SET, COLLATE и права sqlExec("CREATE DATABASE IF NOT EXISTS archive");
Создаем таблицу
//создать таблицу history и напихать туда данные create table archive.history as SELECT p.`ADDED`,p.`VALUE`,t.property_name FROM `phistory` p join vw_clobjpr t on p.`VALUE_ID`=t.value_id WHERE p.ADDED < DATE_SUB( NOW( ) , INTERVAL 2 MONTH ) ; //удалить напиханные данные из пхистори delete FROM `phistory` WHERE `ADDED` < DATE_SUB( NOW( ) , INTERVAL 2 MONTH ) ;