Paradox SQL.

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
different
проходил мимо

Paradox SQL.

Непрочитанное сообщение different » 2008-11-13 7:57:24

Собственно, есть система:

0) Система учета доступа (пластиковые карты входа в помещения).
1) Ее интерфейс управления. Отдельная машинка под Win2k.
2) Выгрузка из этого интерфейса в единственном доступном ему формате - Paradox SQL и единственном доступном виде - за все время.
3) Отправка .db файла по ssh на сервер с MySQL.
4) Выгрузка .db через pxsqldump в формат SQL.
5) Очистка таблицы в базе MySQL.
6) Загрузка туда _всей_ базы по новой.

Естественно, заливка этой всей инфы занимает время (3-4 минуты). А синхронизация производится раз в 15 минут...

Возможно сделать так, чтобы в MySQL заносилось только то, чего там нет? А не вся база.

p.s. выбирать по времени (т.е выгружать, например, только за последние 15 минут) - не вариант. Эта система имеет несколько довольно вредных привычек, сделана весьма криво и легко может пропустить 1-2 синхронизации. А то и повиснуть вовсе. Тогда инфа за это время просто пропадет.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Paradox SQL.

Непрочитанное сообщение zg » 2008-11-13 8:20:29

insert ignore

Гость
проходил мимо

Re: Paradox SQL.

Непрочитанное сообщение Гость » 2008-11-13 22:44:45

Не выйдет. pxsqldump выдает уже готовые запросы, по типу:

INSERT INTO perco_events VALUES (13485,'2006-08-03','14:38:06',1,102,7564,84,112,141,140);

Которые и перенаправляются в mysql. Можно, коненчно, завернуть это в файл, потом в файле sed-ом заменить все INSERT на INSERT IGNORE, и уже файл скормить mysql-ю. Собственно пока так и сделал, как временно-рабочее решение. Спасибо. Но есть 2 проблемы:

1) Решение времнное - в файле получается 400+ строк, причем он прибавляет в весе с каждым днем.
2) Ускорения между инсерт и инсерт игнор - мало ;(
А то время, которое затрачивается на вывод в файл и прогон седом сжирает и эту прибавку - получается даже на несколько секунд дольше. Секунд - т.к. сервер полностью разгружен сейчас. В разгар рабочего дня с cpuload 50%-65% это выливается в минуты. В случае, если наслаивается на выборку из этой же БД - дольше, а если еще и на другие тяжелые задачи, вроде бэкапа на удаленную машину или выборку отчета по трафику - то в десяток минут ;(

Короче, спасибо за рабочее решение. Но может есть мысли по еще пущей оптимизации?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Paradox SQL.

Непрочитанное сообщение zg » 2008-11-14 8:09:54

Гость писал(а):2) Ускорения между инсерт и инсерт игнор - мало ;(
естественно, ну дак и задача стояла как
different писал(а):Возможно сделать так, чтобы в MySQL заносилось только то, чего там нет? А не вся база.
INSERT IGNORE не вставляет строки, если они существуют, но при этом идёт провека по ключу, на ней и тормозит.
Гость писал(а): Но может есть мысли по еще пущей оптимизации?
конечно есть, делается всё просто и легко:
1. если таблица переливается полностью, то делаешь TRUNCATE таблицы (либо её дропаешь и создаёшь заново, но никак не DELETE)
2. вставляешь без проверки по ключам (на них больше всего тормозит)

Ещё вариант: извлекаешь данные только за день и соотвественно заменяешь записи только за день. Для этого можно даже вы***тся и заюзать греп для извлечения только нужных строк ))). Правда я для таких махинаций использую старый добрый C.