Forum Webscript.Ru

Общие => Базы данных => Тема начата: kosm от 19 Августа 2003, 15:26:49

Название: Заливка большого объема данных
Отправлено: kosm от 19 Августа 2003, 15:26:49
Ребят, подскажите как быть с обновлением (заливкой) большого объема информации в БД на удаленный сервер?
Т.е. есть некая база с относительно большим числом записей (порядка 10000-15000). У нее web-интерфейс, короче все как положено.
Необходимо апдейтить ~2000-3000 записей (каждый день). Апдейтить необходио не все, а только изменившиеся записи (изменения только по одному полю).
Какие могуть быть варианты?
1.Попытаться залить все 2000 записей в csv и попробовать их разобрать и вставить на стороне сервера? Но такой скрипт будет выполняться очень долго :( Не прокатит.
2.Иметь локальную версию БД, сверяться с нет, и апдейтить только изменившиеся (это уже порядка 100, а то и меньше). В принципе это для меня пока единственный выход. Реализовывать пока не пытаюсь, может вы чего еще подскажите? Очень надеюсь...

PS: Доступак удаленной БД нет, но если он (доступ) спасет, то впринципе можно попробовать его организовать. Просто как это скажется на скорости тоже пока понятия не имею.

СПАСИБО!

3.Подумался еще один вариант. Заливка CSV данных на удаленный сервер (по FTP) и разбор скриптом уже локально.
Название: Заливка большого объема данных
Отправлено: Alexandr от 19 Августа 2003, 16:54:00
Цитировать
kosm:
с относительно большим числом записей (порядка 10000-15000)

Это очень не большое число записей....
Всё должно летать.
Название: Заливка большого объема данных
Отправлено: Alexandr от 19 Августа 2003, 17:00:15
Делай по первому варианту:
1) LOAD DATA .... INTO TABLE tbl_for_up
на 2000-3000 записей не больше 0.5 секунд
далее
2) UPDATE tbl, tbl_for_up SET tbl.some_field=tbl_for_up.some_field WHERE tbl.id=tbl_for_up.id
где tbl.id, tbl_for_up.id примари или уникуе кеи
ещё в худшем случае около секунды
....
так что за скорость не переживай.
Название: Заливка большого объема данных
Отправлено: kosm от 19 Августа 2003, 17:42:00
Очень хочется надеяться, что ничего придумывать особо не придеться. Дело может в том, что у меня в одной записи много данных. Хотя может опять не много :)
Объемы CSV примерно такие: 500записей - 1мб. Т.е. у меня даже файл залить не получится.
Ерунда еще вот в чем. У меня в CSV данные которые в БД лежат в разных таблицах, поэтому через LOAD я напрямую не залью. Или ты предлагаешь потом tbl_for_up разобрать по своему усмотрению?
Название: Заливка большого объема данных
Отправлено: Alexandr от 20 Августа 2003, 09:03:25
Цитировать
kosm:
Т.е. у меня даже файл залить не получится.

зипуй

Цитировать
kosm:
ты предлагаешь потом tbl_for_up разобрать по своему усмотрению?

Ес-но.
Название: Заливка большого объема данных
Отправлено: Alexandr от 20 Августа 2003, 09:05:18
Сначала LOAD, потом
CREATE TABLE tbl_for_up1 SELECT ... FROM tbl_for_up WHERE ... GROUP ...
CREATE TABLE tbl_for_up2 SELECT ... FROM tbl_for_up WHERE ... GROUP ...

ну и т.д.
Название: Заливка большого объема данных
Отправлено: kosm от 20 Августа 2003, 19:54:49
Alexandr
Спасибо. Идею понял, попробую воплотить...
Тогда еще вопросец. Есть файл со списком значений по которому надо сделать LIKE. Какая нить встроена ф-ция mysql это может?
Типа:
select * from xxx
where name like load_file(\'ddd\');

Да и ведь такая конструкция тоже не будет работать?
select * from xxx
where name like (\'str1%\',\'str2%\',\'str3%\');

Можно как нить быстро сравнить со списком?
Название: Заливка большого объема данных
Отправлено: fidget от 20 Августа 2003, 21:14:11
Цитировать

Есть файл со списком значений по которому надо сделать LIKE. Какая нить встроена ф-ция mysql это может?


нет.
Название: Заливка большого объема данных
Отправлено: Alexandr от 21 Августа 2003, 10:34:05
Цитировать
kosm:
Есть файл со списком значений по которому надо сделать LIKE.

CREATE TEMPORARY TABLE tmp (
my_text VARCHAR(255) NOT NULL
);
LOAD DATA ... INTO TABLE tmp;
SELECT my_text FROM tmp WHERE my_text LIKE \'%val1%\' OR my_text LIKE \'%val2%\' OR my_text LIKE \'%val3%\';
или
SELECT my_text FROM tmp WHERE my_text RLIKE \'(val1|val2|val3)\';
Название: Заливка большого объема данных
Отправлено: kosm от 21 Августа 2003, 10:48:25
Alexandr
Огромное спасибо за помощь!
Через OR не пойдет т.к. valX у меня может быть до 2000 разных. А вот творой вариант более копактный, просто придеться собрать все в список. Хотя тоже длинновато получится :(
А больше вариантов нет?
А если список VAL-значений загрузить во временную таблицу?
...типа: WHERE tbl.name like tmp.name ?
Так не прокатит?
Название: Заливка большого объема данных
Отправлено: Alexandr от 21 Августа 2003, 11:29:53
У меня катит:
CREATE TEMPORARY TABLE tmp (
mark VARCHAR(255) NOT NULL
);
INSERT tmp VALUES (\'%АЗ%\');
SELECT tb.* FROM tmp t, _000 tb WHERE tb.mark LIKE t.mark;

Выбирает \'ВАЗ\', \'ГАЗ\', \'КамАЗ\', и т.д.
Название: Заливка большого объема данных
Отправлено: kosm от 21 Августа 2003, 12:06:33
Точно, попробовал - идет! Только подозрительно долго все это.
У меня основная таблица - 8000 записей, список - 2000 записей.
Отобрал 600. Потратил 71 сек.
Он случаем не пробегает дважды по таблицам?
Название: Заливка большого объема данных
Отправлено: kosm от 21 Августа 2003, 12:09:58
Alexandr
А по этому (http://forums.webscript.ru/showthread.php?s=&threadid=13413) поводу мож чего посоветовать?
Название: Заливка большого объема данных
Отправлено: kosm от 21 Августа 2003, 15:36:49
Alexandr
Ауууууу, спаситель! Ты где?
Название: Заливка большого объема данных
Отправлено: Alexandr от 25 Августа 2003, 08:49:15
Цитировать
kosm:
А по этому поводу мож чего посоветовать?

Чё надо?....
Задача-то какая?
Название: Заливка большого объема данных
Отправлено: kosm от 25 Августа 2003, 11:58:20
Там была ссылка на топик. Задачу решил.
В крадце, надо было сравнить два предложения, схожих по смыслу/произношению, при чем не важен порядок следования слов и знаков препинания. Типа:
МАША ЕЛА КАШУ == КАШУ ЕЛА - МАША!
Название: Заливка большого объема данных
Отправлено: alex_24 от 02 Сентября 2003, 22:09:29
Так функция SOUNDEX подходит для этого, правда только для анклийского.
Название: Заливка большого объема данных
Отправлено: kosm от 03 Сентября 2003, 10:28:22
alex_24
ее и пробовал использовать в паре с Charset (win2koi, koi2rus), при че все слова по отдельности вне зависимости от их расположения в предложении. По правде сказать слегка переусердствовал :) Очень много похожестей находит :(