Temat: SqlServer 2008 vs PostgreSQL
Kamil J.:
[...]
Logiczne jest, to, że to temat rzeka. Chodziło mi o główne różnice jakieś.
To jakie kluczowe są kwestie wydajnościowe ma się podobnie też do innych SZBD.
Mimo to, dzięki za ukierunkowanie jakieś.
Odpowiedź na takie pytanie wymaga dogłębnej znajomości obu serwerów.
MS SQL Server znam mniej/więcej. Raczej mniej jak więcej. Wiem, że potrafi trzymać dane w b-drzewie i odroczyć porządkowanie takiej struktury. Przy większym ruchu się to wyłącza. Tabele mniejsze jak 5MB ładuje do ramu i robi seqscan / nie używa indeksów. Potrafi trzymać dane w indeksach. Optymalizacje, o których słyszałem polegały na pakowaniu wszystkiego do indeksów i za to się jakieś gwiazdki dostawało. Jak indeks zwraca to, czego wymaga zapytanie i nic więcej - dostaje 3 gwiazdki i to ponoć jest super.
PG trzyma dane w strukturze plików. Konkretna tabela zapisana jest w plikach o rozmiarze do 1GB - standardowo. To chyba zależy od wielkości strony. Standardowo strona ma 8kB. Rekord może znajdować się w 1 stronie. Jak wychodzi poza stronę, dane trafiają do TOASTa. Dane z kolumny są dzielone na 1/4 strony i zapisywane w osobnej tabeli. Odczyt robi się wolny, ale działa. Dane mogą być kompresowane. Każda strona ma nagłówek, każdy rekord też. Rekord wie dla jakich transakcji ma być dostępny. W ten sposób nie ma problemu z kolizjami, dostępem do zatwierdzonych danych itp. Indeks wskazuje na rekord przez tid. Strona i element na niej. Wyszukiwanie po tid jest baardzo szybkie. Poza tym można w indeksie trzymać dane, żeby nie czytać ich z tabeli. Jak statystyki wskażą, że indeks wyfiltruje więcej niż 2% danych i tak będzie seqscan.
Tu jest więcej:
http://postgresql.org/files/developer/internalpics.pdf
Co prawda nie tylko o tym. Dopisałem trochę o TOASTach, bo w pdfie tego chyba nie ma.
Dalsze lektury:
https://momjian.us/main/presentations/overview.html
No i Tom Lane -
http://en.wikipedia.org/wiki/Tom_Lane_%28computer_scie... - chociaż jego prezentacji jakoś znaleźć nie mogę.
PG ma bardzo rozwinięty system typów. Do kolumny da się wpisać wszystko, co da się przeczytać w C. Dla przykładu można wpisać 2GB tablicę - array. W takim przypadku trafi to TOASTa, ale da się. To jest siła tego silnika. full text search, indeksowanie przestrzenne, h-store - przechowywanie tego w porządnej formie, a nie jako string...
IMO - to jest odpowiedź na Twoje pytanie. BTW część z tego już raz napisałem.
IMVHO to nie jest rozwiązanie problemu, chociaż pozwoli na pogłębienie wiedzy. To może doprowadzić do rozwiązania. No, ale - nie moje małpy - nie mój cyrk. ;)