Od kilku dni wszystko jest na linuxpl – udało mi się przenieść rozwiązania z MS-SQL-a na MySQL. Nauczyłem się, czego MySQL nie znosi, na czym się wywala, czym się różni składnia tej wersji języka od składni ogólnej. Najbardziej brakowało mi tego, że w MySQL-u nie ma w ogóle funkcji tabelarycznych (czyli funkcji, które zwracałyby nie pojedyncze wartości, lecz cały zestaw rekordów (z angielska nazywa się to DataSet). Brak takich funkcji zmuszał mnie do odwoływania się do tabel stałych, co po pierwsze jest znacznie wolniejsze, a po drugie wymaga odróżniania rekordów moich od nie moich… No ale najważniejsze, że wszystko jest i że działa!
Niestety nie działa tak, jak bym chciał – działa za wolno!
Pozostawiłem to, co napisałem na początek, ale dodałem dodatkowo wywołanie tej nowej procedury. Okazuje się, że ten nowy licznik gubi rekordy – i to różnice są znaczne. Np. dziś do tej pory nowy licznik odnotował 396 odwiedzin, gdy w tym samym czasie stary odnotował ich 513! A więc nawet to nie są pojedyncze rekordy, lecz 1/5 wszystkich rekordów!
MySQL nie ma takich narzędzi diagnozy, jakimi dysponuje MS-SQL, a ja nawet nie próbowałem prostych porównań z selektów z obu tabel, ale podejrzewam, że to jest tak, że jeśli ktoś wejdzie na stronę, zanim skończy się zapis rekordów poprzedniego wejścia, to te wcześniejsze wejście już nie zostanie w ogóle zapisane. Innymi słowy jest tak, że póki nie uda mi się skrócić czasu potrzebnego do zapisania rekordu odwiedzin, to mój nowy licznik do niczego się nie nadaje!
Pierwsze zmiany już wprowadziłem, ale te różnice, jakie podałem, są już po zastosowaniu tych zmian – potrzebne są dalsze. Najbliższy krok będzie polegał na zmniejszeniu liczby zapytań SQL-owych wywoływanych ze skryptu PHP. W tej chwili są aż 4 takie wywołania – zadeklarowanie zmiennych, wywołanie procedury rozpoznającej bloga, pobranie tych zmiennych ustawionych przez procedurę i dopiero jako czwarte jest wywołanie właściwej procedury. Przesunę wywołanie tej procedury rozpoznającej bloga do środka właściwej procedury, a w tej sposób skrypt PHP. Mam nadzieję, że to wystarczy, ale w zanadrzu mam jeszcze kilka pomysłów.
W każdym razie jeszcze to potrwa…
Jak wrócę to być może zauważę zmiany i efekt Twej żmudnej pracy; realizuj pomysły a nuż wpadniesz na super rozwiązanie; powodzenia
Oby się nie okazało, że Ty zdążysz wrócić, a ja ciągle w tym samym miejscu:(
Czekamy na rezultaty. 🙂
Niestety ciągle stoję w miejscu – zamieniłem wszystko na wywołanie jednej tylko procedury; w pierwszej chwili mi się wydawało, że już niczego nie gubi – niestety tak było tylko przez chwilę. Jak już była tylko jedna procedura do wywołania, to zrezygnowałem z obiektowej obsługi połączenia z bazą danych i przeszedłem do prostej obsługi proceduralnej (nieobiektowo wywołuję tę starą procedurę). Niestety i to nie zapewniło, by do nie gubiły się rekordy. Wrzuciłem obie tabele na MS-SQL-a, by łatwo można było je ze sobą porównywać – te rekordy, które nie przechodzą, niczym się nie różnią od tych, które przechodzą; a więc nie zależy to od danych. Nie jest to też problem nakładania się na siebie zapytań – to są całe okresy, gdy gdy nie wchodzą rekordy. Ba – w tej chwili nawet nie wiem, czy problem rzeczywiście jest po stronie tej procedury, czy też to skrypt php kończy swoje działanie jeszcze przed wywołaniem tej procedury. Wygląda na to, że będę musiał założyć LOG-i, by wytropić miejsce powstawania błędów.
Jesteś w tym dobry, a przy tym wytrwały z pewnością Ci się uda :)Trzymam kciuki 🙂 Pozdrawiam 🙂
Wczoraj już myślałem, że będę miał już tylko taki licznik dla siebie, że nie uda mi się tego wszystkiego przenieść w całości na MySQL-a, bo wczoraj s. Małgorzata zapowiedziała, iż dziś mi wyłączy swoje źródło danych (do mnie zagląda tak mało osób, że nie byłbym w stanie dokończyć testów wydajnościowych). Szczęśliwie prolongowała termin eksmisji, a mnie przez ten czas udało się wszystko naprawić. Teraz trwa już tylko samo testowanie i wygląda na to, że licznik ze wszystkim nadąża.Założenie stron, na których ktoś będzie mógł założyć swój licznik, a potem wszystko oglądać, też będzie czasochłonne, ale już to, już mogę robić spokojnie.
Podziwiam Cię, Leszku.I pozdrawiam.
Ależ nie ma za co mnie podziwiać – systemami baz danych profesjonalnie zajmuję się od prawie 20 lat (kilku miesięcy jeszcze brakuje), na SQL-u od kilkunastu. Mniej znana jest dla mnie strona internetowa zagadnienia – tego uczę się dopiero to pisząc (nigdy nie znałem języka php) – ale nie jest to trudny język. Paradoksalnie większe problemy mam z MySQL-em, bo jego składnia różni się od standardu, a wielu możliwości w stosunku do MS-SQL-a w ogóle nie ma. W każdym razie stan na dziś jest taki, że już wiem na pewno, iż będę mógł udostępnić swoje liczniki każdemu, kto tylko będzie je chciał, bo sam licznik już działa i to prawie bezawaryjnie (poprzedniej nocy mi się zatrzymał i nie aktualizował na bieżąco danych, ale niczego nie zgubił – w tabeli bufora wszystko było).W tej chwili zakładam bazę, którą napełniam danymi zgromadzonymi przez mój pierwszy licznik i pewnie dziś w nocy przestawię, by to już na tej bazie dochodziło do bieżącego wypełniania danych (w tej chwili cały czas działa pierwszy licznik, oprócz niego testowy, w którym nie ma historycznych danych i teraz założyłem trzeci z danymi historycznymi, który będzie docelowym).Następny krok, to dorobienie interfejsu do przeglądania tabel. Do tego kroku najchętniej skorzystałbym z jakiś darmowych bibliotek, ale nawet nie wiem, czy takowe są.Jak już będę po tym etapie, to będę mógł Ciebie zaprosić do założenia swojego licznika 🙂 (choć to nie będzie koniec prac)
Witaj LeszkuWidzę, że pojawiła sie nowa notka i nie o licznikach. Czy pracę nad tymi licznikami już zakończyłeś? Jeśli tak, to muszę przyznać, że to co ja mogę w tym zakresie zobaczyć na Twojej stronie nie napawa mnie zbyt wielkim entuzjazmem, bo:- ambitnie założyłeś, że znajomość języka angielskiego jest w narodzie powszechna, bo wszystko tylko w tym języku jest dostępne. Mnie to np. niestety znakomicie ogranicza. A podglądnęłam Twój licznik dla blogerów – wszystko po polsku.- brakuje instrukcji czy ogólnego opisu co w ogóle można zobaczyć w tych statystykach.- asekurujesz się koniecznością rejestracji i logowania, żeby udostępnić takim jak ja (tzn. czytaczom i ew. komentującym) coś trochę więcej.Napiszesz coś więcej, co się o nas dowiedziałeś ciekawego na podstawie tych liczników? A i jeszcze mam prośbę o informację nie dotyczącą liczników, ale wiedzy bardziej ogólnej dot. komentowania. Siostra Małgorzata zmieniła niedawno (notka „Remont chałupy”)sposób zarządzania komentarzami. Co powoduje (przeglądarka, program operacyjny, może coś innego), że nie mogę komentować jak inni w kaskadzie (po kliknięciu nie otwiera mi się okienko), a tylko na końcu mogę pisać komentarz jak dotychczas? Czy można temu jakoś zaradzić czy taka jest już „moja uroda”? Z góry dziękuję za odpowiedź i pozdrawiam.MR
1. Przyznaję, że nie do końca rozumiem, co widziałaś. Podejrzewam, że kliknęłaś na „Zobacz statystyki” i w ten sposób przeniosłaś się do tego amerykańskiego licznika, z którego mogę korzystać za darmo przez rok. Nie jest to więc mój licznik. Myślę też, że już rozumiesz, dlaczego wszystko tam jest po angielsku.2. Do mojego pewnie weszłaś z bloga Basi – a tam, jak słusznie zauważyłaś, wszystko jest po polsku (tak dokładnie nazwy wszelkich pól i parametrów są angielskie, ale samą stronę robię po polsku).3. Roboty są jeszcze mocno w lesie. Siłą rzeczy nie ma jeszcze żadnej instrukcji. Ale jeśli wysłałabyś do mnie maila, to mogę Ci opisać, co i jak można wywołać. 4. Logowania jeszcze nie obsłużyłem – póki co wykorzystałem jedynie kontrolkę z Artisteera. A idea logowania jest taka – każdy, kto będzie chciał założyć sobie licznik, musi się wcześniej zarejestrować. I to właściciel licznika będzie decydował, czy licznik będzie dla innych dostępny, czy nie. A więc logowanie będzie konieczne, by pobrać kod licznika oraz by zdecydować, czy licznik jest dostępny, czy nie. A jeśli ktoś zdecyduje, że licznik ma być tylko dla niego, to zalogowanie będzie konieczne także do wejścia do statystyk.5. Jeśli chodzi o wiedzę płynącą z tych statystyk, to jeszcze żadnej nie mam, bo póki co pisałem same najbardziej elementarne rzeczy – nade wszystko, by możliwie dobrze następowało rozpoznawanie komputerów, a teraz zajmuję się samymi stronami http://www.6. Jeśli chodzi o bloga Siostry, to Siostra wykupiła sobie upgrade ArtiSteera i teraz ma w wersji (ja posługuję się trialem, co widać po projekcie – wersja trial na każdym rysunku wstawia napis „trial”). Ta wersja, którą Siostra miała wcześniej, powstawała w czasach, gdy na Blogerze nie było jeszcze zagnieżdżania komentarzy – i stad u Siostry tego nie było. Ta wersja już to potrafi. Ale obsługa po stronie skryptów, to jedna sprawa – drug a jest to, czy przeglądarka potrafi to obsłużyć. Zainstaluj może Chroma i spróbuj z niego.
Dzięki za wyczerpującą i przyjazną odpowiedź. Widzę,że zablokowałeś „wizyty”, ale chyba przy okazji otworzyły się „komputery” (może były wcześniej, ale ich wtedy nie zauważyłam). Twoja intuicja nt. moich obserwacji liczników – prawidłowa.Nie piszę bloga, więc pewnie nie będę użytkownikiem opracowywanych przez Ciebie liczników, nawet jeśli byłbyś gotów udostępnić mi je w prezencie. Ale dzięki za zaufanie i gotowość do umożliwienia mi „podglądu” w postępie prac. Obawiam się jednak, że moje „pelętanie się” po „placu budowy” tylko by przeszkadzało i absorbowało niepotrzebnie Twoją uwagę, nie dając nic pożytecznego w zamian.Napewno będę czekać i na Twoje notki nie związane z licznikami (nb. zobacz jaki szybki oddźwięk wywołała ostatnia notka), jak i te związane z analizą danych uzyskanych z liczników. Życzę więc powodzenia w tej pracy.MR
Niezupełnie zablokowałem – zacząłem dodawać różne parametry wywołania. Teraz można określić blogi, których wizyty chce się oglądać. Docelowo przecież będzie to wywołanie z konkretnego bloga, a więc powinno się oglądać wizyty tylko na tym blogu. Z drugiej jednak strony właściciel kilku blogów będzie chciał oglądać wizyty na każdy ze swoich blogów – a więc w jednym wywołaniu widzieć kilka blogów. To wszystko już jest. Druga rzecz, która jest, to taka, by móc ograniczyć wyświetlane rekordy tylko do tych, które odpowiadają temu, gdy ktoś napisał komentarz (choćby po to, by wpisać autorów tych komentarzy) – to też już jest. Jest także to, że można określić z ilu dni mają być prezentowane dane (domyślnie z 2, jak w tym liczniku amerykańskim, czy jak było w countomacie – ja jednak dodałem możliwość określenia liczby dni). To więc, że obecnie nie widzisz wizyt, wynika z tego, że nie podajesz którego bloga.Nb. te komputery, które widzisz, to tylko moje testy dotyczące języka. Problem jest bowiem taki, że pole z nazwą komputera jest zdefiniowane, jako utf8_polish_ci, tymczasem prawidłowo wyświetla się gdy stronę zdefiniuje się jako iso-8859-2 (czyli latin2). Założyłem więc tabelę pomocniczą, w której wielokrotnie zdefiniowałem to pole, ale z różnymi kolacjami (ang. collate) – okazało się, że nici z konwersji i tak wszystko wyświetla się dobrze tylko dla latin2! – widzisz więc, że przy okazji wychodzą zupełnie marginalne problemy, które jednak koniecznie trzeba rozwiązać (do tego będę musiał jeszcze wrócić).Natomiast rzeczywiste komputery możesz obejrzeć na zakładce Najaktywniejsi, ale bez dodatkowej instrukcji nie poradzisz sobie ze względu na to określanie bloga, o który pytamy. Wybacz, ale publicznie nie chcę ogłaszać tych komend – mogę to zrobić tylko na maila. Ale szanuję to, że nie chcesz mi dać swojego adresu mailowego (nie bardzo rozumiem dlaczego, ale szanuję).A oczywiście to, że byś tam zaglądała, w niczym by mi nie przeszkadzało, a przeciwnie – cenię sobie Twoje uwagi.