![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 29.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam, od pewnego czasu borykam się z pewnym problemem.
Opiekuję się serwisem, który codziennie wymaga aktualizacji bazy danych poprzez import kilku plików XML do bazy danych (MYSQL). Pliki są wielkośći kilkunastu bądź kilkudziesięciu MB. W celu sprawnego importu dziele je na mniejsze porcje rzędu 1MB a nastepnie importuje pokoleji. Baza danych zawierająca oferty składa się kilku tabel w ktorych liczba rekordow wacha sie od kilkunastu tysiecy do 1,5 mln rekordow. W kazdej tabeli jest zdefiniowanych po kilka indeksów (w celu sprawnego dzialania wyszukiwarki w ktorej niezbedne jest łączenie kilku tabel poprzez JOIN) jednak podczas importu (innstrukcji INSERT , UPDATE), koniecznosc aktualizacji indeksow sprawia ze trwa on o wiele dluzej i przez 3-4 godz serwis staje sie praktycznie nie dostepny dla uzytkownikow. Chodzi o to ze na tabele zapewne nakladane sa blokady podczas wykonywania instrukcji INSERT oraz UPDATE. Serwis praktycznie zamiera poniewaz nie moze korzystac z tych tabel. Ma ktos moze pomysl jak rozdzielic dostep do zasobow , tak aby import oraz serwis dzialal sprawnie? Serwis jest typu http://travelplanet.pl i mysle ze posiada podobna ilosc ofert (to tak dla zobrazowania z czym mam doczynienia...). |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
a jak robisz te aktualizacje? pętlą w PHP i milionami INSERT / UPDATE ?
czy pojedynczym LOAD DATA INFILE ? zalecam to drugie rozwiązanie - jeżeli źródła danych masz w XML, to zrób w PHP konwerter XML -> CSV i skorzystaj z LOAD DATA INFILE - w MySQL nie ma szybszej metody importu danych z zewnątrz... Ten post edytował nevt 22.02.2008, 08:05:15 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 13:09 |