Страница 1 из 1

Paradox SQL.

Добавлено: 2008-11-13 7:57:24
different
Собственно, есть система:

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 синхронизации. А то и повиснуть вовсе. Тогда инфа за это время просто пропадет.

Re: Paradox SQL.

Добавлено: 2008-11-13 8:20:29
zg
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% это выливается в минуты. В случае, если наслаивается на выборку из этой же БД - дольше, а если еще и на другие тяжелые задачи, вроде бэкапа на удаленную машину или выборку отчета по трафику - то в десяток минут ;(

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

Re: Paradox SQL.

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

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