napisałem ostatnio o kolejnych testach jakie robili kolesie z tweakers.net.
bluszcz wtedy skomentował, że chciałby zobaczyć testy postgresa z soliddb lub choćby falconem, a nie z kiepskawym innodb.
prosił i ma 🙂 blog mysql performance przeprowadził testy innodb, myisam i falcona. właśnie pod kątem skalowalności. efekt – ogólna, praktycznie całkowita porażka falcona.
przykłady wykres wyników jednego z testów wygląda tak:
przy czym uwaga: nie wybrałem takiego na którym falcon wyszedł najgorzej. są takie wykresy gdzie linia od wydajności falcona "leży" na osi.
do tego dochodzi jeszcze takie jedno zdanie:
"… Falcon cannot handle LIMIT properly …" (wyjęte z kontekstu, ale sens niezmieniony).
czekam teraz aż ktoś pokaże testy z soliddb. wtedy też na pewno ja zaprezentuję.
Author: depesz
medal za marketing – o ile ktoś to kupił
jaka część waszego komputera wydaje się być mało istotna jeśli chodzi o wydajność gier?
trafiłem właśnie na firmę która robi i sprzedaje pewnien podzespół (kartę) do pecetów – dzięki tej karcie wydajność grania ma wzrosnąć, bo odciąża ona główny procesor od pewnych zadań.
jaka to karta? kto zgadnie?
otóż jest to karta sieciowa!
ethernet.
"killer network interface card". jest olbrzymia (jak na kartę sieciową). karta jest zasadniczo dedykowanym komputerkiem z zainstalowanym linuksem. i "inteligentniej" obsługuje sieć zmienijaszając lagi i "latency".
chyba jestem z innej bajki. na stronie producenta można zobaczyć rysunek który pokazuje, że po wstawieniu killer-nic'a, obciążenie procesora spada o połowę.
i sprzedają to za $250. kartę sieciową do gier! eh. pewnie niedługo zobaczymy specializowane "for performance gamers" karty-kontrolery myszki i klawiatury.
acer sprzedaje laptopy z zainstalowanym backdoorem?
tan chew keong wykrył na swoim laptopie coś dziwnego. nieznaną mu kontrolkę activex, ustawioną jako bezpieczną z możliwością zdalnego wykonywania, która to kontrolka obsłguje metodę Run() przyjmującą argumenty: drive, path, parameters.
hmm .. wygenerował testowego html'a i faktycznie – okazało się, że kontrolka ta pozwala zdalnej stronie na wykonanie programu na maszynie klienckiej.
pogrzebał dalej i znalazł identyczną kontrolkę na innym laptopie acera. plik był ten sam, z datą modyfikacji z 1998 roku.
co prawda gdy zupgrade'uje się ie do ie 7.0, to i tak pojawia się pytanie (mimo ustawień w rejestrze) czy pozwolić na wykonanie metody run na kontrolce, ale jeśli używa się ie6.0 (a tak domyślnie jest) – no cóż.
sam nie mam acera – nie mam jak sprawdzić. a czy w waszych acerach też są takie ciekawostki?
tapeta na dziś
nowa mazda
w detroit odbywają się właśnie targi motoryzacyjne. jest sporo nowości, ale praktycznie wszystkie są takie nijakie. ot, trochę przemodelowane wcześniejsze modele.
ale nie wszystkie.
mazda pokazała model ryuga. jest piękna. i cudowna. obejrzeć i poczytać o niej można na stronach autobloga. u mnie tylko 2 zdjęcia by pokazać wam czym się zachwycam:
jak nie odpowiadać na ogłoszenia o pracę
pewien kanadyjczyk stwierdził, że zgłosi się do pracy w dubaiu – webmaster.
zrobił to w mocno niekonwencjonalnym stylu – można by wręcz powiedzieć, że styl jest tak niekonwencjonalny, że facet może mieć pewność, że w życiu pracy w dubaju nie dostanie.
wykład o klastrowaniu postgresa
za tydzień, w sobotę, 13 stycznia adam buraczewski wygłosi wykład nt. "słonie pracują w stadzie".
tematyka obejmie wszystkie liczące się metody klastrowania postgresa: slony, pgpool, dblink, sequoia, postgres-r i inne.
wykład odbędzie się w gliwicach – jeśli będziecie w pobliżu – polecam. temat ciekawy, a adam ma kolosalną wiedzę. i umiejętność jej przekazania.
tapeta na dziś
drzewa w sql’u – metoda “śledzenie rodzica”
jest to zdecydowanie najbardziej rozpowszechniona metoda przechowywania drzew w bazach.
zakłada ona (zgodnie z naszymy podstawowymi założeniami), że każdy element ma tylko 1 element nadrzędny (lub go nie ma – gdy jest to element główny). dzięki temu całość można zapisać w jednej tabeli
:
$ CREATE TABLE categories ( id BIGSERIAL, parent_id INT8 REFERENCES categories (id), codename TEXT NOT NULL DEFAULT '', PRIMARY KEY (id) ); CREATE UNIQUE INDEX ui_categories_picn ON categories (parent_id, codename);
nasze testowe drzewo w tej tabeli będzie wyglądało tak:
# SELECT * FROM categories; id | parent_id | codename ----+-----------+------------ 1 | [null] | sql 2 | 1 | postgresql 3 | 1 | oracle 4 | 2 | linux 5 | 3 | solaris 6 | 3 | linux 7 | 3 | windows 8 | 6 | glibc1 9 | 6 | glibc2 (9 rows)
jak widać – same podstawowe danych, jedna tabelka, mała nadmiarowość. wygląda ok. a jak to odpytać?
1. pobranie listy elementów głównych (top-levelowych)
> SELECT * FROM categories where parent_id is null;
2. pobranie elementu bezpośrednio “nad" podanym elementem
dane wejściowe:
- ID : id elementu
SELECT p.* FROM categories c JOIN categories p ON c.parent_id = p.id WHERE c.id = [ID];
jeśli zapytanie nic nie zwróci – znaczy to, że dany element był “top-levelowy".
3. pobranie listy elementów bezpośrednio “pod" podanym elementem
dane wejściowe:
- ID : id elementu
> SELECT * FROM categories WHERE parent_id = [ID];
4. pobranie listy wszystkich elementów “nad" danym elementem (wylosowanym)
dane wejściowe:
- ID : id elementu
tu pojawia się problem. można to rozwiązać selectem z dużą ilością joinów (tyle joinów ile poziomów kategorii jest powyżej naszego elementu), albo zastosować rozwiązanie algorytmiczne:
- pobierz dane dla aktualnego elementu: SELECT * FROM categories WHERE id = [ID];
- jeśli parent_id dla aktualnego elementu jest inny niż NULL wykonaj:
- SELECT * FROM categories WHERE id = [aktualny.parent_id]
- ustaw aktualny na właśnie pobrany
jest to rozwiązanie typu z wieloma zapytaniami, ale rozwiązanie z joinami ma wszystkie wady zapytań z “metody wielu tabel" (nota bene tam też można było zastosować podejście algorytmiczne, realizowane w aplikacji klienckiej)
5. pobranie listy wszystkich elementów “pod" danym elementem (wylosowanym)
dane wejściowe:
- ID : id elementu
niestety – i tym razem zapisanie tego w postaci pojedynczego zapytania będzie problematyczne. w tym przypadku należy zastosować rozwiązanie rekurencyjne:
- pobierz listę wszystkich elementów bezpośrednio pod podanym elementem (vide punkt 3)
- dla każdego z elementów powtórz powyższy punkt
- powtarzaj tak długo aż dojdziesz do sytuacji gdy już nie ma elementów poniżej.
6. sprawdzenie czy dany element jest “liściem" (czy ma pod-elementy)
dane wejściowe:
- ID : id elementu
>SELECT count(*) from categories WHERE parent_id = [ID];
jeśli zwróci 0 – to dany element jest liściem.
7. pobranie głównego elementu w tej gałęzi drzewa w której znajduje się dany (wylosowany) element
- ID : id elementu
niestety – jedyną słuszną metodą jest użycie algorytmu z punktu 4 i pobranie ostatniego elementu (takiego dla którego algorytm się kończy, bo parent_id jest NULLem.
podstawową zaletą tego rozwiązania jest to, że stała struktura tabel jest w stanie przechowywać dowolną ilość danych w drzewie – niezależnie od ilości elementów czy poziomów zagłębień.
wadami jest głównie konieczność korzystania z pewnych rozwiązań algorytmicznych zamiast użycia zapytań bazodanowych.
1terabajt na pojedynczym dysku
przez sieć przetoczyła się lawina informacji o tym, że hitachi zaprezentuje na targach ces dysk o pojemności 1 terabajta.
część komentatorów przeoczyła jednakże dwa fakty:
- hitachi zaprezentuje ten dysk, ale nie będzie on jeszcze w sprzedaży. sprzedaż ma ruszyć w pierwszym kwartale 2007 roku – czyli w najgorszym przypadku – 31 marca 🙂
- seagate też ma zaprezentować swój dysk 1 terowy. i ich dysk też nie będzie od razu w sprzedaży – ma być dostępy w pierwszej połowie roku. czyli – w najgorszym przypadku do 30 czerwca.
tak więc – dużymi krokami zbliża się chwila (znowu) gdy pojemności dysków i pamięci mierzymy innymi jednostkami (giga i tera). dodatkowo interesujące jest to, że seagate już teraz zapowiedział, że w ciągu kilku lat zacznie sprzedawać dyski o pojemności 37.5tera.
kiedy doczekamy się pecetów z media marktu z dyskami 1 tera?