Автор Тема: Заливка большого объема данных  (Прочитано 7877 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kosm

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

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

СПАСИБО!

3.Подумался еще один вариант. Заливка CSV данных на удаленный сервер (по FTP) и разбор скриптом уже локально.
« Последнее редактирование: 19 Августа 2003, 16:01:29 от kosm »

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Заливка большого объема данных
« Ответ #1 : 19 Августа 2003, 16:54:00 »
Цитировать
kosm:
с относительно большим числом записей (порядка 10000-15000)

Это очень не большое число записей....
Всё должно летать.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Заливка большого объема данных
« Ответ #2 : 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 примари или уникуе кеи
ещё в худшем случае около секунды
....
так что за скорость не переживай.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн kosm

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 110
  • +0/-0
  • 0
    • Просмотр профиля
    • http://japanretro.tk
Заливка большого объема данных
« Ответ #3 : 19 Августа 2003, 17:42:00 »
Очень хочется надеяться, что ничего придумывать особо не придеться. Дело может в том, что у меня в одной записи много данных. Хотя может опять не много :)
Объемы CSV примерно такие: 500записей - 1мб. Т.е. у меня даже файл залить не получится.
Ерунда еще вот в чем. У меня в CSV данные которые в БД лежат в разных таблицах, поэтому через LOAD я напрямую не залью. Или ты предлагаешь потом tbl_for_up разобрать по своему усмотрению?

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Заливка большого объема данных
« Ответ #4 : 20 Августа 2003, 09:03:25 »
Цитировать
kosm:
Т.е. у меня даже файл залить не получится.

зипуй

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

Ес-но.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Заливка большого объема данных
« Ответ #5 : 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 ...

ну и т.д.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн kosm

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 110
  • +0/-0
  • 0
    • Просмотр профиля
    • http://japanretro.tk
Заливка большого объема данных
« Ответ #6 : 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%\');

Можно как нить быстро сравнить со списком?
« Последнее редактирование: 20 Августа 2003, 20:35:01 от kosm »

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Заливка большого объема данных
« Ответ #7 : 20 Августа 2003, 21:14:11 »
Цитировать

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


нет.
На Машине Тьюринга далеко не уедешь.

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Заливка большого объема данных
« Ответ #8 : 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)\';
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн kosm

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 110
  • +0/-0
  • 0
    • Просмотр профиля
    • http://japanretro.tk
Заливка большого объема данных
« Ответ #9 : 21 Августа 2003, 10:48:25 »
Alexandr
Огромное спасибо за помощь!
Через OR не пойдет т.к. valX у меня может быть до 2000 разных. А вот творой вариант более копактный, просто придеться собрать все в список. Хотя тоже длинновато получится :(
А больше вариантов нет?
А если список VAL-значений загрузить во временную таблицу?
...типа: WHERE tbl.name like tmp.name ?
Так не прокатит?

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Заливка большого объема данных
« Ответ #10 : 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;

Выбирает \'ВАЗ\', \'ГАЗ\', \'КамАЗ\', и т.д.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн kosm

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 110
  • +0/-0
  • 0
    • Просмотр профиля
    • http://japanretro.tk
Заливка большого объема данных
« Ответ #11 : 21 Августа 2003, 12:06:33 »
Точно, попробовал - идет! Только подозрительно долго все это.
У меня основная таблица - 8000 записей, список - 2000 записей.
Отобрал 600. Потратил 71 сек.
Он случаем не пробегает дважды по таблицам?

Оффлайн kosm

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 110
  • +0/-0
  • 0
    • Просмотр профиля
    • http://japanretro.tk
Заливка большого объема данных
« Ответ #12 : 21 Августа 2003, 12:09:58 »
Alexandr
А по этому поводу мож чего посоветовать?

Оффлайн kosm

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 110
  • +0/-0
  • 0
    • Просмотр профиля
    • http://japanretro.tk
Заливка большого объема данных
« Ответ #13 : 21 Августа 2003, 15:36:49 »
Alexandr
Ауууууу, спаситель! Ты где?

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Заливка большого объема данных
« Ответ #14 : 25 Августа 2003, 08:49:15 »
Цитировать
kosm:
А по этому поводу мож чего посоветовать?

Чё надо?....
Задача-то какая?
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28