niedziela, 18 listopada 2012

Sortowanie dużych plików i geneza sydnromu "not invented here"

Wpis ten ten dzieli się na dwie części. Jeśli interesuje cię tylko techniczne mięsko to możesz drugą część ostentacyjnie olać. Ale osobiście jednak polecam ją przeczytać gdyż może to spowodować wybitnie wnikliwą zadumę u czytelnika (lub zdenerwowanie jeśli nie znajdzie tam nic ciekawego - ale to i tak lepsze od oglądania tańca z gwiazdami - dop. redakcji)

Analiza gotowca do sortowania naprawdę dużych plików


Problem : do posortowania jest w jednej chwili N relatywnie dużych plików tektowych

Czy istenieje gotowe rozwiazanie : tak : http://en.wikipedia.org/wiki/External_sorting

Czy istnieje implementacja tegoż rozwiązania w najwspanialszym języku we wszechświecie : tudzież też : http://code.google.com/p/externalsortinginjava/

Test

Maszyna


JVM
-Dosgi.requiredJavaVersion=1.5
-XX:MaxPermSize=256m
-Xms40m
-Xmx512m
Na wejściu
Plik zawierający N kwerend geograficznych (Miasto,ulica, dom itd)

Wyniki testu

Sortowanie alfabetyczne
Rozmiar pliku Czas sortowania
50k 374 ms
500k 1181 ms


Sortowanie specyficzne według pól kwerendy (na początku kraj, później maidto itd)
Rozmiar pliku Czas sortowania
50k 2815 ms
500k 24233 ms

Zrzut z visualVm

ogólna ocena


Część druga - Syndrom "tego tutaj jeszcze nie wynaleziono"

Syndrom doczekał się swojego wpisu w wikipedii : http://en.wikipedia.org/wiki/Not_invented_here. W IT objawia się ona pisaniem, pisaniem i pisaniem od nowa rzeczy, które dawno już ktoś zaimplementował. Ile osób zamiast użycia gotowej biblioteki zaimplementowałoby sortowanie plików własnoręcznie? I znowu coś co na dzień dzisiejszy wydaje się być bez sensu znajdzie uzasadnienie w warunkach do których jesteśmy tak naprawdę przystosowani...

Powrót na sawannę

Powyżej widzimy uproszczony koncepcyjny diagram gromady liniejących małp biegających po sawannie od 100tys do kilku milionów lat temu (od nich się właśnie wywodzimy). Członek gromady oznacza osobnika będącego w gromadzie a nie członka kogoś z gromady. Przeżycie każdego osobnika było w dużym stopniu zależne od grupy i pozycji jaką w niej zajmuje. Na zajmowaną pozycję i co za tym idzie - ilość dostępnych dla danej jednostki zasobów - wpływ miały : siła, koalicje oraz potencjalna wartość dostarczana gromadzie. W tym momencie interesuje nas to ostatnie.

Załóżmy, że gromada liczy 50 osób. Mamy w niej dwóch homo sapiens, którzy są podobnego wzrostu, podobnych osiągów ale jeden z nich posiadł umiejętność odróżniania grzybów trujących od jadalnych lub tez w sprytny sposób umie zwędzić miód z ula - kto będzie miał wyższą pozycję w gromadzie (zakładając, że żaden nie ma pleców u starszyzny)? Niby oczywiste, że ten który posiadł specyficzną umiejętność ALE aby tak się stało dwa warunki muszą być spełnione. Gromada z jakiegoś powodu musi potrzebować tej specyficznej umiejętności oraz gromada musi wiedzieć, że dany osobnik ma ową specyficzną umiejętność

Powrót do biura

Zakładając, że owe wzorce zostały ewolucyjnie wyryte w nas przez setki tysięcy lat zastanówmy się jak mogą się one objawiać :

  1. Gromada potrzebuje rozwiązania problemu
  2. Umiem rozwiązać dany problem
  3. Ale, ale istnieje ogólnodostępne tanie rozwiązanie tego problemu.
  4. Mam teraz dwa wyjścia - albo samemu zaimplementować rozwiązanie i zostać bohaterem (strata szansy gromady/zysk osobisty) czy też zostać kolesiem, który tylko zadzwonił po kolesia, który zna się na grzybkach (zysk gromady/strata szansy jednostki)

Można płakać, że profesjonalista w naszym zawodzie to powinien zawsze dla gromady i ten tego i w ogóle ale przypomnę a) nie jesteśmy istotami racjonalnymi, b) nie da się tak po prostu uciąć milionów lat ewolucji.Pozostaje mi jedynie dać wskazówkę dla osób w jakikolwiek sposób generujących warunki pracy - trzeba zrobić tak aby ów "osobnik" czuł się na tyle dowartościowany sukcesami grupy aby nie potrzebował szukać kompensacji w indywidualnych sukcesach. Trochę swiatła na ostatnie zdanie może rzuci dowcip :

- Szefie, ale szef ma fajne auto!
- słuchaj, pracuje dużo, zostawaj po godzinach, wykazuj inicjatywę i bierz na siebie coraz więcej obowiązków ... to za rok będę miał lepsze

5 komentarzy:

  1. jak to Twoj szef przeczyta to chyba podwyzki nie bedzie. no chyba ze to Ty jestes samcem alfa w gromadzie:-)

    OdpowiedzUsuń
  2. Motyla noga faktycznie. Myślisz że zdążę usunąć ten post zanim go przeczyta? Choroba, znowu będę musiał kołpaki na giełdzie sprzedawać żeby jakieś prezenty rodzinie kupić na święta :(


    PS. A tak na poważnie to życzę mądrzejszych szefów ;)

    OdpowiedzUsuń
  3. A w rzeczywistości często jest tak: ty wiesz jak grzybki trujące od jadalnych odróżnić, ale inna małpa krzyczy głośniej lub ma większą maczugę i prowadzi towarzystwo w maliny.

    Z analogiami jest tak, że są dobre do czasu. Niestety, w rzeczywistości często nie ma tak dobrze, że ta małpa się otruje i zdechnie, a reszta pójdzie dalej.

    OdpowiedzUsuń
  4. To nie była analogia tylko bardzo bardzo uproszczona geneza powstania w nas pewnych instynktów, które ewoluowały przez setki tysięcy lat;)

    Natomiast gdyby podejść do tego jak do analogii dnia obecnego to faktycznie w dzisiejszych czasach działa to troszkę inaczej.

    pzdr

    OdpowiedzUsuń
  5. Tak naprawdę zauważyłem, że praca w IT często nie polega na napisaniu całego rozwiązania od początku, ale na posiadaniu wiedzy jak zintegrować istniejące komponenty w taki sposób aby stworzyć rozwiązanie, z którego klient będzie zadowolony.

    W sumie też nie jest tak, że istniejące rozwiązanie jest zawsze lepsze od tego, które sami napiszemy od podstaw. Dla każdego problemu warto wykonać analizę, które podejście jest bardziej optymalne.

    Bardzo dobrą filozofią jest filozofia Linuksa, robić jedną rzecz, ale za to niezwykle dobrze (Powershell też daje radę). Dzięki temu z prostych narzędzi można łatwo zbudować bardzo zaawansowany skrypt, który potrafi robić cuda.

    Dobór odpowiedniego narzędzia to podstawa, ale niestety często jest to sprawa bardzo indywidualna (zależna m.in. od kompetencji i doświadczenia).

    PS. bardzo fajny blog, naprawdę miło się go czyta.



    OdpowiedzUsuń