Van egy shoutcast logfile-om, ~380000 sor, naponta ~7000 sorral bővül. Ebből szeretnék hallgatottsági és egyéb adatokat kinyerni.
Komolyabb tervezés nélkül nekiugorva úgy oldottam meg, hogy soronként néztem meg regexppel, hogy tartalmaz-e olyan adatot, ami épp nekem kell, valamint a keresett időintervallumba esik-e. A néhány ezer sort tartalmazó teszteléshez használt logrészleten jónak tűnt, de a teljessel próbálva kiderült, hogy nagyon lassú.
Pythonban próbáltam megoldani a dolgot. Még C-ben tudnám esetleg megírni ugyanezt, de előtte inkább ötleteket szeretnék kérni, hogy hogyan lehet ezt a feladatot megoldani hatékonyabban. Nem sok közöm van a programozáshoz, szóval a triviális ötletek is jöhetnek :)
Előre is köszönöm!
- 1726 megtekintés
Hozzászólások
Told adatbázisba (az egyes mezők tipusát jól megválasztva), majd támadd meg select-ekkel.
Ja, a napi 7000 sor nem sok. Mondhatni aprócska :-P
- A hozzászóláshoz be kell jelentkezni
Szerintem ez még több idő, bepakoltatni egy adatbázisba.
--
A lehetetlen csak a lusta ember kifogása!
- A hozzászóláshoz be kell jelentkezni
Pedig az adatbázisok épp hogy ilyen feladatokra a legalkalmasabbak.
Nyilván nem kézzel, soronként kell adatbáziba átvezetni, hanem írni egyszer egy szkriptet, ami az aznapi logokat este átvezeti.
Utána adatbázisból már sokkal könnyebb infókat kinyerni, főleg, ha még nem tudod, hogy pontosan mit akarsz.
(A lekérdező sql utasítást sokkal könnyebb átaszabni, mint egy összehackelt összesítő scriptet.)
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni
A lentebb leírtak alapján már én is támogatom az adatbázisos dolgot ;)
Itt én még arra az esetre gondoltam ha ezt a nagy mennyiségű adatot egyszer beolvastatja elkészít belőle a teljesre egy statisztikát (kb. max. 3-4 félét). Ami azt jelenti, hogy egy beolvasással kész a dolog. És utána mondjuk csak a napi részt kell hozzávenni a kész számokhoz. Ugyanezt a feladatot elvégezni adatbázissal: a scriptnek fel kell tölteni az adatbázist (1. teljes olvasás), majd a lekérdezés során legalább egyszer végig nézi az adatbázist (2. teljes olvasás). És szerintem a napi adatok hozzáadása után újra végig fogja nézni az egészet.
De az viszont tény, hogy a változó lekérdezéseket sokkal célszerűbb adatbázisban csinálni.
Nem vagyok egy nagy szakértő adatbázisok terén, a meglátásomat azért is írtam, mert kíváncsi lennék a véleményekre, hogy jól látom-e.
--
A lehetetlen csak a lusta ember kifogása!
- A hozzászóláshoz be kell jelentkezni
És tudod előre biztosan az összes dolgot, amit le akarsz kérdezni? Csak mert ha nem, akkor megint az összes fájlt újra fel kell dolgoznod.
Ráadásul ha nem vagy elég penge matekból, hibás eredményeket fogsz kapni, ugyanis nem minden képlet "engedi meg", hogy csak úgy hozzávegyed az eddigi (rész)eredményhez az új adatsorokat.
Ha már egyszer bent van adatbázisban, akkor nem igaz, amit írtál, ugyanis se neked, se a scriptjeidnek nem kell semmit újra sem feldolgozni/olvasni egy lekérdezéshez, az adatbázis engine pedig több millió sorral is nagyon stabilan és gyorsan működik, számodra ez teljesen transzparens, és nulla munkát jelent. (Csak az új sorokat kell naponta felvinni, és u.n. nézetekkel még a lekérdezéseket sem kell újra bepötyögni, hanem a nézetekben mindig az aktuális eredményt fogod látni.)
Az "adat bázisok" pont ilyenekre vannak.
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni
rotalni kell a logot es akkor csak mondjuk az aznapira kell lefutnia a scriptednek. nyilvan a regi 380000 sor mar ugysem valtozik, felesleges azt is mindig kielemezni.
- A hozzászóláshoz be kell jelentkezni
Szerintem ebbe az irányba megyek el, kőszi :)
--
"my mind had skipped town and left me behind to pay the rent"
- A hozzászóláshoz be kell jelentkezni
Nézd meg a logtail -t
ez megjegyzi az utolsó listázott poziciót és csak onnét listáz.
Üdv Robit
- A hozzászóláshoz be kell jelentkezni
Ha elküldöd a pontos leírást, hogy mit is akarsz, akkor megnézem hátha tudok vele mit kezdeni. De remélem nem tegnapra kell mert idővel én is híján állok. :)
--
A lehetetlen csak a lusta ember kifogása!
- A hozzászóláshoz be kell jelentkezni
Hobbi projekt, nem sűrgős :)
A shoutcast szerver amikor valaki csatlakozik hozzá bedobja a logba az időpontot, az ip-t, egy egyedi azonosítót, az épp aktuális hallgató számot és a klienst. Ha pedig valaki lecsatlakozik, akkor azt is, hogy mennyi ideig volt csatlakoztatva és mennyi adatot fogadott.
A hallgatottság, az átlagos hallgatási idő valamint, hogy mikor hányan csatlakoznak, ezeket szeretném grafikonnal ábrázolni, állítható időintervallummal.
Korábban már más módszerrel sikerült kinyernem a hallgatottsági adatokat, majd gnuplottal szépen ábrázolni azt, később pedig állíthatóvá tudtam tenni az időintervallumot. De így lényegében két logom lett.
A rotálós módszerrel összeházasítom az eddigi dolgokat és megnézem mi sül majd ki belőle :)
--
"my mind had skipped town and left me behind to pay the rent"
- A hozzászóláshoz be kell jelentkezni
En kisse szokatlan iranybol kozelitenem meg a dolgot. A logfile legyen egy FIFO file. A fifo masik oldalan (readonly open) figyeljen egy kissebb helper demon, aki minden iraskor (gyk amikor a shoutcast ir be egy sort) regexppel vagy massal megnezi a sor, ha olyan, kitolt egy adatbazis sort. Ezutan webalkalmazas oldalrol olyan SQL-ekkel tudod megtamadni az adatbazist, amilyennel jolesik, senkit nem izgat onnantol. A nagy logot meg csak egyszer kell betolni a DB-be. Amugy a beerkezett logsort ki lehet kuldeni egy masik fajlba is, ha amugy szukseged van a logra.
- A hozzászóláshoz be kell jelentkezni
Amit fentebb leírtál, főleg a változtatható intervallumról, az alapján én is ezt a fajta megoldást javasolnám.
--
A lehetetlen csak a lusta ember kifogása!
- A hozzászóláshoz be kell jelentkezni
hali,
Erre szerintem az awk valo. En hallgatokkal szoktam tesztelgetni, pl. egy gyogyszer torzs, ami 2.5 Mb, kb 12000 gyogyszer adataival es soronkent 35 koruli mezovel csv formatumban. Ezen egy nagyon bonyolult lekerdezes is 2 mp. alatt fut le. Erre talaltak ki.
- A hozzászóláshoz be kell jelentkezni