rsobczuk
12.11.2007, 13:17:55
Witam,
mam następujący problem.
Posiadam w bazie danych kilka milionów rekordów. Są to informacje o osobach (title, imię, nazwisko, adres, kod pocztowy, email ...). Jak napisałem takich rekordów jest kilka milionów.
Zdarza się, że przychodzą do mnie ludzie z plikami w Excellu. W pliku jest np 60 000 rekordów.
Proszą mnie, żeby przypisać do osób w pliku Excell adresy email z bazy danych łącząc te 2 źródła informacji po:
Title: takie jak Mr, Ms, Miss itp...
Nazwisko
Kod pocztowy
Szukanie takich informacji trwa piekielnie długo.
Jak najlepiej zaprojektować bazę danych i jak przechowywać w niej dane - jak zaindeksować tabele, żeby wyszukiwanie trwało dość szybko.
Dzięki za wszystkie propozycje.
Rafał
najtje
12.11.2007, 15:56:51
Jeśli ktoś prosi cię np. żeby przypisać adresy email dla osoby
o nazwisku X imieniu Y i tytule Z
to musisz na nazwisku, imieniu i tytule mieć nałożony indeks. Ogólnie to na wszystkie atrybuty po których łączysz tę tabelę z excel'a i tablę bazy danych.
Jeżeli masz inne zestawy atrybutów po których łączysz tzn. ktoś przychodzi i mówi żeby wypisać te adresy email po tytułach i nazwiskach tylko wtedy musisz mieć indeks na atrybutach tytuł i nazwisko.
Nie wiem jak można połączyć bezpośrednio arkusz excela i bazę danych ale chyba da się zaimportować dane z arkusza do mysql. Napewno potrafi to robić OpenOffice a w msoffice napewno da się skorzystać z ODBC
Indeo
28.11.2007, 21:46:17
Tak jak powiedział przedmówca - indeksy to podstawa. Najsilniejsze jednak są indeksy unikatowe - są najszybsze. Dlatego jesli tylko wiemy o jakimś polu lub kombinacji pól że może być unikalna - warto założyć na takiej grupie indeks unikalny.
Nie wiem w jaki sposób wymieniasz dane między excelem a mysql. ODBC jest wolny - można wykorzystać inne sposoby. Nie wiem też ile jednorazowo danych wrzucasz do excela. Ale chyba nie tak dużo bo excell ma ograniczenie wielkości arkusza. Ja tez mam miliony rekordów w kilkudziesięciu powiązanych tabelach - łącznie 3GB danych i uwierz mi wszystko hula szybko.
Wykorzystywałem wiele metod. Najprostsza jest taka: piszesz w php stronę która wyświetla tabele HTML z danymi wynikowymi. Następnie w skrypcie php przed wysłaniem html do przeglądarki wysyłasz nagłówek informujący o typie pliku - arkusz excel. Można wymusić zapisanie pliku wynikowego lub otwarcie go w przeglądarce. Excel świetnie otwiera tabele htmlowe. Jeszcze inny sposób to wystawienie interfejsu XML - w nowych pakietach msoffice są wbudowane narzędzia obsługi list XML - nawet do worda można wstawić dynamiczna tabele.