Moim celem jest stworzenie szybkiej, niezawodnej i zautomatyzowanej metody dostępu do danych tylko do odczytu zawartych w kilku bardzo dużych źródłach danych o płaskich plikach ( CSV , stała szerokość i dokumenty XML) za pomocą Drupal 7, do których można uzyskać zapytanie przy użyciu Widoku 3 moduł. Wolałbym używać już dostępnych modułów, ale zbudowanie niestandardowego modułu jest również opcją.
Aby wykluczyć moduły i metody nieodpowiednie dla tego zadania, oto statystyki plików, z którymi pracuję:
- Roczny import: 8 500 000 linii pliku CSV . (Oczyszczane i ładowane co roku. Ma klucz podstawowy.)
- Cotygodniowy import: plik o stałej szerokości 350 000 linii. (Oczyszczane i ładowane co tydzień. Brak klucza podstawowego .)
- Import godzinowy: 3400 linii pliku CSV . (Chciałbym aktualizować i synchronizować tak często, jak to możliwe, ale nie częściej niż co 20 minut. Ma klucz podstawowy)
- Codzienny import: plik XML 200 pozycji. (Codziennie czyszczone i ładowane ponownie. Ma klucz podstawowy)
Konwersja między tymi trzema formatami nie stanowi problemu i można tego dokonać, jeśli poprawi to wydajność importu lub umożliwi udostępnienie lepszych narzędzi. ( AWK dla stałej szerokości do CSV itp.) Automatyzacja pobierania i konwersji jest łatwa dzięki skryptom cron i sh , ale nadal wymaga automatyzacji integracji Drupal 7. Korzystanie z tabel niestandardowych jest również możliwe, o ile vews mogą odwoływać się do danych za pomocą relacji.
Jaka byłaby najlepsza praktyka do osiągnięcia tego rodzaju integracji danych z Drupal 7? Czy pomijam również ważne szczegóły dotyczące danych lub tego, co próbuję osiągnąć?
Oto kilka projektów, nad którymi obecnie szukam rozwiązania. Chciałbym rozwinąć tę kwestię, aby pomóc innym w podjęciu decyzji, którą wybrać drogę podczas importowania większych danych.
Importowanie danych do węzłów:
- Kanały (obecnie Alpha dla D7)
Kanały będą niezawodnie importować dane. Prędkość jest rozsądna w przypadku mniejszych źródeł danych, ale jest zbyt wolna w przypadku tabel o wielkości 300 000+.
Automatyzacja dostępna za pomocą cron i Job Scheduler (obecnie Alpha dla D7).
Brak dostępu do indeksu lub unikalnego klucza w danych źródłowych utrudnia korzystanie z niego. Jest szybszy niż kanały, ale wciąż wolno importuje bardzo duże tabele.
Automatyzacja jest dostępna za pośrednictwem drush i cron.
Niestandardowe tabele zamiast węzłów
- Moduł danych (obecnie Alpha dla D7)
Moduł danych wygląda bardzo obiecujące, ale jest bardzo buggy dla D7 w tej chwili. Wymagania dotyczące automatyzacji i prędkości importu można łatwo spełnić przy użyciu danych, ale brakuje niezawodności. Integracja widoki (link jest na D6) wygląda bardzo obiecująco.
- Kreator tabel (niedostępny dla D7)
Dodano to w celach informacyjnych. W tym momencie nie ma kandydata na D7, ale mógłby służyć jako punkt wyjścia dla niestandardowego modułu.
- Schemat widoków (porzucony, tylko D6)
Dodano to w celach informacyjnych. Wygląda na to, że został zaabsorbowany przez Kreatora tabel w Drupal 6. Ponownie, dodano tylko w celach informacyjnych.
- Importer (RC2 dla D7)
Wydaje się, że wymaga integracji Kreatora tabel (tylko D6) do integracji widoków . Dodano w celach informacyjnych, ale nie spełnia wymagań Widoku.
@MPD - Dodano „Tabele niestandardowe” jako możliwe rozwiązanie i rozbudowano moduły. Dziękuję za ten dodatek.
źródło
Myślę, że podejście oparte na węzłach (a nawet na jednostkach) wypali twój serwer milionami węzłów. Poza tym, patrząc na import co godzinę, oznacza to, że będziesz tworzył node_save () przynajmniej raz na sekundę. To za dużo dla Drupala i powoduje problem z wydajnością.
Powodem tego jest to, że nie potrzebujesz żadnego mechanizmu zaczepu, nie potrzebujesz pathauto (ale możesz ręcznie utworzyć alias, jest znacznie tańszy niż pathauto), nie potrzebujesz pól ... Napisz proste zapytanie „INSERT” jest 100 razy szybsze niż node_save () lub entity_save ().
1 / IMHO najlepszą opcją jest niestandardowa tabela i niestandardowy moduł do importu danych, a następnie napisz moduły obsługi widoków do integracji z Drupal.
2 / Pamięć podręczna bazy danych jest unieważniana podczas importu co godzinę. Jeśli zajmuje to zbyt dużo czasu, możesz pomyśleć o replikacji. W najprostszej formie utwórz dwie identyczne tabele, użyj pierwszej, zaimportuj do drugiej, przełącz konfigurację Drupala na drugą tabelę, zsynchronizuj drugą tabelę z pierwszą (następnie opcjonalnie przełącz z powrotem do pierwszej). Innym rozwiązaniem jest niestandardowy skrypt importu, przygotuj i zgrupuj zapytania INSERT / UPDATE, a następnie wyślij je na końcu tylko w jednej transakcji, aby skrócić czas zapisu bazy danych.
źródło