Są sytuacje, które zmuszają nas to przeniesienia pewnych danych z jednej bazy do drugiej lub z tabel stworzonych na potrzeby jednego systemu do drugiego. Prosty przykład. Klient ma już stronę opartą na pewnym systemie zarządzania treścią. Ma tam też stworzoną potężną bazę danych kontrahentów, produktów i innych ważnych danych. Niestety system ten się nie sprawdza lub zwyczajnie jest stary i trzeba przenieś tą potężną ilość danych. Pojawia się tylko jeden problem. Aby dane zapisać w nowej bazie trzeba je najpierw przetworzyć.

Potrzebujemy programu lub skryptu, który takie zadanie wykona.

Przedstawiona sytuacja wymaga rozwiązania doraźnego, należy więc pójść po linii najmniejszego oporu. Warto wybrać wtedy język, który masz opanowany najlepiej. A gdyby takie przetwarzanie danych musiało się odbywać codziennie? Wtedy warto się zastanowić czy nasz czas jest ważniejszy od wydajności programu/skryptu?

Postaram się zrobić krótkie porównanie algorytmu przetwarzania tych samych danych. Sprawdzać będę kilka popularnych języków. Jak się ma szybkość działania do czasu pisania i długości kodu? Postaram się to sprawdzić dla języków interpretowanych i kompilowanych.

No to co to ma robić?

Będziemy przetwarzać wyniki lotto. Zacznę od pobrania z eXpert Lotto pliku z wynikami wszystkich losowań. Następnie dodam te wyniki do tabeli w bazie danych. Tutaj dopiero zacznie się zabawa. Program ma na wyjściu dodawać do nowej tabeli wszystkie możliwe kombinacje trzech liczb z każdego losowania. Jest jeszcze jeden warunek. W bazie może występować tylko jeden zestaw a do zestawu ma być dołączona liczba wystąpień danego układu we wszystkich losowaniach.

Algorytm

Problem bardzo często można rozwiązać na wiele rożnych sposobów. Nawet w tak prostym przetwarzaniu można coś popsuć. Oto moje wstępne pomysły:

  1. Przetwarzać każdą pozycję bazy danych, następnie dodawać do bazy jeżeli nie ma jeszcze takich danych. Jeżeli są to zwiększyć licznik o jeden.
  2. Wczytać bazę danych do pamięci, następnie ją przetworzyć i dodając dane postępować jak wyżej.
  3. Wczytać dane, przetworzyć oraz wyeliminować duplikaty naszych „trójek” sumując ich występowanie. Następnie dodanie ich do bazy w formie jednego lub wielu zapytań.

 

Każde rozwiązanie ma swoje plusy i minusy.

  1. Połączenie z bazą danych
    • Punkt pierwszy i drugi wymaga dużej ilości połączeń z bazą danych.
    • Punkt trzeci ogranicza ilość transakcji to minimum
  2. Pamięć
    • Punkt pierwszy wykorzystuje najmniej pamięci do przetwarzania danych – nawet smartfon z niższej półki powinien sobie poradzić z takim zadaniem
    • Punkt drugi używa najwięcej pamięci, ze względu na przechowywanie w tablicach danych wejściowych z bazy oraz wszystkie występujące „trójki”
    • Punkt trzeci wykorzystuje minimum pamięci do swojego działania jednak w moim porównaniu znajduje się na środkowej pozycji pod tym względem.

 

Teraz najważniejsze pytanie, jaki sposób wybrać?

Najgorzej w tym porównaniu wypada numer 2. Wykorzystuje dużo pamięci oraz dużo połączeń z bazą danych.

Numer pierwszy mógłby się sprawdzić w przypadku, gdy szybkość działania nie ma znaczenia a zasoby systemowe są mocno ograniczone.

Moim faworytem jest numer 3. Wykorzystuje sporo pamięci, ale dla zwykłego komputera to i tak drobne. Natomiast mocno ogranicza połączenia z bazą danych. Takie rozwiązanie powinno być najszybsze.

A co na początek?

Aby pokazać różnice w prędkości działania algorytmu przygotuje rozwiązania dla numeru 1 i 3. Testy przeprowadzę przy użyciu lokalnej oraz zdalnej bazy danych. Jeżeli moje myślenie było prawidłowe to najszybsze będzie rozwiązanie numer 3 dla bazy lokalnej a najwolniejsze numer 1 dla bazy zdalnej.

Ten wpis nie ma komentarzy. Kto pierwszy ten lepszy!

Dołącz do dyskusji

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *