Phistory to archive: различия между версиями
Xor (обсуждение | вклад) |
Mixman (обсуждение | вклад) м (Добалена категория) |
||
(не показано 12 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
[[Category:Юзеркейсы]] | |||
Из телеграмчата от пользователя XOR | Из телеграмчата от пользователя XOR | ||
====Описание==== | ====Описание==== | ||
Для ускорения работы MajorDoMo, есть смысл перенести таблицу phistory "боевой" (читай основной рабочей) базы в таблицу отдельно созданной базы, для истории или анализа сторонними методами. Приведенный ниже код переносит данные, старше 2-х месяцев, из таблицы phistory боевой базы в таблицу history | Для ускорения работы MajorDoMo, есть смысл перенести таблицу phistory "боевой" (читай основной рабочей) базы в таблицу отдельно созданной базы, для истории или анализа сторонними методами. Приведенный ниже код переносит данные, старше 2-х месяцев, из таблицы phistory боевой базы в таблицу history базы archive. Тут приведен пример экспорта истории в базу рядом, что даёт некоторые преимущества по ср., например, с вариантом, когда экспорт идёт во внешний файл (что актуально для малины). | ||
Все работы проводим '''на свой страх и риск''' в phpmyadmin. Возможно позже появится что-то автоматизированное. | Все работы проводим '''на свой страх и риск''' в phpmyadmin. Возможно позже появится что-то автоматизированное. | ||
Строка 13: | Строка 14: | ||
<pre> | <pre> | ||
// она у меня не только для этого) тут просто в очередной раз используется | |||
// для того, чтобы от айди перейти к Объект.Свойство | |||
// тут стандартная связь между классом, объектом, свойством и айди | |||
// поддерживается иерархия классов глубиной в 3 | |||
CREATE OR REPLACE VIEW vw_clobjpr AS | 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`, | select `v`.`ID` AS `value_id`,`v`.`PROPERTY_ID` AS `PROPERTY_ID`,`v`.`PROPERTY_NAME` AS `PROPERTY_NAME`,`v`.`UPDATED` AS `UPDATED`, | ||
Строка 23: | Строка 28: | ||
left join `classes` `cpp` on((`cp`.`PARENT_ID` = `cpp`.`ID`))) | left join `classes` `cpp` on((`cp`.`PARENT_ID` = `cpp`.`ID`))) | ||
</pre> | </pre> | ||
====Создаем базу==== | ====Создаем базу==== | ||
<pre> | <pre> | ||
//из php-скрипта, например, так. База создается с умолчаниями. При необходимости, подправить | //из php-скрипта, например, так. База создается с умолчаниями. | ||
//При необходимости, подправить CHARACTER SET, COLLATE и права | |||
sqlExec("CREATE DATABASE IF NOT EXISTS | sqlExec("CREATE DATABASE IF NOT EXISTS archive"); | ||
</pre> | </pre> | ||
====Создаем таблицу==== | ====Создаем таблицу==== | ||
<pre> | <pre> | ||
//создадим таблицу из скрипта (пустую) | |||
$sql = "CREATE TABLE archive.history ( | |||
`ADDED` datetime DEFAULT NULL, | |||
`VALUE` varchar(255) NOT NULL, | |||
`PROPERTY_NAME` varchar(100) NOT NULL DEFAULT '' | |||
) ENGINE=MyISAM DEFAULT CHARSET=utf8"; | |||
sqlExec($sql); | |||
//или (запускать из db_terminal) | |||
//создать таблицу history и напихать туда данные | //создать таблицу history и напихать туда данные | ||
create table archive.history as | create table archive.history as | ||
Строка 41: | Строка 56: | ||
MONTH ) ; | MONTH ) ; | ||
//удалить напиханные данные из пхистори | //желательно тут же удалить напиханные данные из пхистори | ||
delete | delete | ||
FROM `phistory` | FROM `phistory` | ||
WHERE `ADDED` < DATE_SUB( NOW( ) , INTERVAL 2 MONTH ) ; | WHERE `ADDED` < DATE_SUB( NOW( ) , INTERVAL 2 MONTH ) ; | ||
</pre> | |||
====Скрипт для запуска каждый месяц==== | |||
<pre> | |||
$sql = "INSERT INTO archive.history | |||
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 )" ; | |||
sqlExec($sql); | |||
$sql = "DELETE FROM `phistory` WHERE `ADDED` < DATE_SUB( NOW( ) , INTERVAL 2 MONTH )" ; | |||
sqlExec($sql); | |||
</pre> | </pre> |
Текущая версия от 19:31, 22 мая 2020
Из телеграмчата от пользователя XOR
Описание
Для ускорения работы MajorDoMo, есть смысл перенести таблицу phistory "боевой" (читай основной рабочей) базы в таблицу отдельно созданной базы, для истории или анализа сторонними методами. Приведенный ниже код переносит данные, старше 2-х месяцев, из таблицы phistory боевой базы в таблицу history базы archive. Тут приведен пример экспорта истории в базу рядом, что даёт некоторые преимущества по ср., например, с вариантом, когда экспорт идёт во внешний файл (что актуально для малины).
Все работы проводим на свой страх и риск в phpmyadmin. Возможно позже появится что-то автоматизированное.
Внимание!!! лучше сначала не удаляйте из боя, убедитесь, что база создана, с нужной кодировкой и правами. создайте там таблицу, наполните данными, посмотрите, что всё в порядке. а потом можно и чистить бой.
Создаем "вьюху"
// она у меня не только для этого) тут просто в очередной раз используется // для того, чтобы от айди перейти к Объект.Свойство // тут стандартная связь между классом, объектом, свойством и айди // поддерживается иерархия классов глубиной в 3 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");
Создаем таблицу
//создадим таблицу из скрипта (пустую) $sql = "CREATE TABLE archive.history ( `ADDED` datetime DEFAULT NULL, `VALUE` varchar(255) NOT NULL, `PROPERTY_NAME` varchar(100) NOT NULL DEFAULT '' ) ENGINE=MyISAM DEFAULT CHARSET=utf8"; sqlExec($sql); //или (запускать из db_terminal) //создать таблицу 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 ) ;
Скрипт для запуска каждый месяц
$sql = "INSERT INTO archive.history 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 )" ; sqlExec($sql); $sql = "DELETE FROM `phistory` WHERE `ADDED` < DATE_SUB( NOW( ) , INTERVAL 2 MONTH )" ; sqlExec($sql);