MySQL – kompresja pól tekstowych

0

Dosyć często w bazach danych używa się dosyć krótkich pól tekstowych – varchar, lub char.
Nie wszyscy jednak wiedzą iż pola te mogą podlegać kompresji, jest tylko jeden warunek.
Jeżeli wielkość kolumny nie przekroczy 8 znaków, dane nie będą kompresowane.
Dla deweloperów może to jednak mieć duże znaczenie. W procesie analizy danych i co za tym idzie tworzenia struktur dla nich staramy się często zminimalizować ich ilość aby nie rezerwować/zajmować niepotrzebnie przestrzeni pamięciowej.

Załóżmy iż chcemy w bazie przechować okrojoną datę w formie RRRR-MM. Na potrzeby tego rodzaju danych programista stworzy kolumne o danych takich jak:

CREATE TABLE test (
testId INT UNSIGNED NOT NULL AUTO_INCREMENT,
shortDate CHAR(7) NOT NULL,
relatedId INT UNSIGNED NOT NULL,
testOptions INT UNSIGNED NOT NULL,
PRIMARY KEY(testId),
KEY (shortDate)
) Engine=MyISAM;

Tym silnika niekoniecznie tutaj ma znaczenie, warto sprawdzic i dla MyISAM oraz dla InnoDB.

Oczywiscie typ char został wybrany ponieważ zawsze dane mają taką samą długość co ułatwia mysqlowi zarządzanie rekordem a przy okazji nie marnuje miejsca.

Po wrzuceniu 1M rekordów za pomocą:

DELIMITER //
CREATE PROCEDURE fillTable()
BEGIN
SET @x:=0;
REPEAT INSERT INTO test
SET shortDate=DATE_FORMAT(NOW() – INTERVAL FLOOR(0 + RAND() * (10000)) DAY, ‘%Y-%m’),
relatedId=FLOOR(1 + RAND() * 10000), testOptions=FLOOR(1 + RAND() * x’7fffffff’);
SET @x = @x + 1;
UNTIL @x > 1000000 END REPEAT;
END //
DELIMITER ;

Wywolanie dodawania rekordow:

call fillTable();

otrzymujemy taką oto wielkość indeksu:

select TABLE_NAME,ENGINE,ROW_FORMAT,DATA_LENGTH,INDEX_LENGTH FROM information_schema.tables WHERE TABLE_SCHEMA=’test’;

+————+——–+————+————-+————–+
| TABLE_NAME | ENGINE | ROW_FORMAT | DATA_LENGTH | INDEX_LENGTH |
+————+——–+————+————-+————–+
| test       | MyISAM | Fixed      |    20000020 |     26477568 |
+————+——–+————+————-+————–+

Jedna drobna zmiana, zdawało by się – na gorsze 😉

ALTER TABLE test CHANGE shortDate shortDate CHAR(8) NOT NULL;

Spójrzmy teraz co stało się z wielkościami indeksów:
select TABLE_NAME,ENGINE,ROW_FORMAT,DATA_LENGTH,INDEX_LENGTH FROM information_schema.tables WHERE TABLE_SCHEMA=’test’;

+————+——–+————+————-+————–+
| TABLE_NAME | ENGINE | ROW_FORMAT | DATA_LENGTH | INDEX_LENGTH |
+————+——–+————+————-+————–+
| test | MyISAM | Fixed | 21000021 | 13034496 |
+————+——–+————+————-+————–+

Co zaszło? Otóż pomimo straty jednego bajta na rekord uzyskaliśmy całkiem sporo na indeksach (50%), co za tym idzie? Mniej operacji IO i szybciej uzyskujemy wyniki… Oczywiscie zmiana jest pozytywna wtedy gdy mocno są obciążone dyski CPU zaś trochę się nudzi.

Maksymalizowanie okna w MacOSX

0

Znalazłem ostatnio ciekawą aplikacyję rozwiązującą denerwujący problem z makami.
Otóż chodzi o mocno upierdliwe i dosyć nieprzewidywalne zachowanie przycisku maksymalizuj. Rozwiązaniem jest zainstalowanie aplikacji o nazwie Right Zoom i uruchomienie jej, reszta będzie już jasna.

Polecam obejrzenie filmiku związanego z aplikacja:

Z Kroniki Mistrza Wincentego…

0

Rzecz dziwna, lecz zupełnie wiarygodna. Istnieje bowiem księga listów Aleksandra zawierająca prawie dwieście listów. W jednym z nich pisze w ten sposób do Arystotelesa: “Żeby ciebie, ciągle zaniepokojonego o nasze położenie, wątpliwość i wahanie się nie utrzymywały w niepewności, wiedz, że doskonale powodzi się nam u Lechitów. Jest zaś sławne miasto Lechitów bardzo blisko północnych stron Panonii, które nazywają Caraucas, raczej ludne niż bogate, dobrze zabezpieczone raczej dzięki sztuce niż położeniu; nad tym miastem i nad sąsiednimi triumfowaliśmy zgodnie z życzeniem”. W tym zaś liście, który mu odpisał Arystoteles, czytamy te słowa:
“Wieść głosi, że wraz ze swoimi odniosłeś tryumf nad miastem Lechitów Caraucas, lecz oby chwała tego tryumfu nigdy nie była pomnożyła twoich tytułów do sławy! Odkąd bowiem wlano haniebną daninę w posłów twoich wnętrzności, odkąd doświadczyłeś lechickich argyraspidów, blask twego słońca u wielu zagasł, a nawet zdawało się, że korona twego państwa się zachwiała”.
Gdyby nie dobrodziejstwo twego opowiadania, wyznaję doprawdy, że do dziś nie wiedziałbym, o kim to powiedziano. Lecz jakże zdumiewająca wprost zuchwałość [owych] mężów! Bo chociaż podrażniony, nie do tego jednak stopnia obrażony został Aleksander przez zniewagę wyrządzoną mu przez Koryntian. Gdy tymczasem inne miasta pozwoliły mu wejść, pierwszy Korynt zamknął przed nim bramy. Do jego mieszkańców napisał Aleksander: “Jeśli jesteście mądrzy, ostaniecie się, w przeciwnym razie – nie”. Oni zaś nie bacząc na nietykalność ukrzyżowali jego posłów. Lecz niemniej podziwu godny jest wielce dowcipny pomysł owego męża, przez który tak baczny na podstępy mistrz dał się zwieść. W dosyć podobny bowiem sposób tenże Aleksander zwiódł wojska Dariusza: widząc, że są one o wiele większe niż jego, kazał przywiązać wołom do ogonów i rogów gałęzie, aby zdawało się, że nawet lasy idą za nim.
Dlatego ów wynalazca tak zbawiennego podstępu został ustanowiony naczelnikiem w ojczyźnie, którą uratował, a wkrótce potem, wsparty zasługami cnót, odznaczony został wysoką godnością królewską. Dano mu imię Lestek, to jest przebiegły, ponieważ więcej nieprzyjaciół zniszczył przebiegłością niż siłą.

MySQL, 10 na 90

0

Trochę dziwny tytuł i z pewnością nie każdy na pierwszy rzut oka rozumie o co chodzi, wyjaśnię zatem po krótce.

Nie jest to punktacja dla tejże bazy danych. Jest to tak zwana zasada o lokalności danych.
Twierdzi ona iż 10% kodu wykonuje się 90% czasu. Równie dobrze mógłbym tutaj wrzucić zasadę ‘pareto’ jednak nazwa czy drobna różnica w liczbach zupełnie nie ma tutaj znaczenia. Nie bedę jednak opowiadał o trzewiach tego DBMSa, powiem zaś o czymś co dotyczy każdego użytkownika bazy oraz jego danych.

Wszelkiego rodzaju systemy które teraz wytwarzamy, skoncentrowane są zazwyczaj wokół jednego użytkownika, dla którego gromadzone są dane, lub też wokół czasu w jakim są otrzymywane. Oznacza to, że zalogowanemu użytkownikowi pokazujemy dane które dotyczą tylko jego osoby (wiadomości, koszyki, produkty), lub też dane które dotyczą danego czasu (najświeższe wiadomości, najnowsze promocje, etc). Nieczęsto się zdarza iż przy generowaniu głównej strony serwisu pokazujemy wszystko co tylko znajduje się w bazie. Zazwyczaj jest jakieś ‘ziarno’ wokół którego należy się skupić.
Niestety pomimo iż skupiamy sie na tym ‘ziarnie’ podczas generowania zawartości strony, nie skupiamy się na tym podczas opiekowania się wytworzonym systemem.
(more…)

Jak działa MySQL. MyISAM – Optymalizacje II

0

Artykuł ten jest kontynuacją artykułu “Jak działa MySQL. MyISAM – Optymalizacje I”. Osobom które nie zapoznały się z wcześniejszym materiałem sugeruję przejrzenie go, w innym wypadku część informacji może się wydawać niespójna.

Poprzednio artykuł zakończyłem informacją jak budować zapytania aby stworzony indeks został wykorzystany. Przemilczałem jednak pewne pchające się na usta pytanie. Skąd mamy wiedzieć czy MySQL rzeczywiście wykorzystał indeks, oraz czy wykorzystał indeks właściwy. Ten artykuł chciałbym przeznaczyć właśnie na ten cel.
MySQL prawdę ci powie… Aby dowiedzieć się w jaki wykonywana jest robota najlepiej spytać tego kto pracuje a nie tego kto pracę zleca. MySQL daje nam taką możliwość. Polecenie EXPLAIN potrafi wyjaśnić jak zbudowana jest tabela, oraz jak wykona się dane zapytanie.

(more…)

Jak działa MySQL. MyISAM – Optymalizacje I

0

Kolejnego posta czas zacząć. Tym razem 0day padł na MySQL i działanie MyISAM.
Nie będę się tutaj rozpisywał o podstawach MySQL mam zamiar jedynie opisać ja działa MyISAM (i to dosyć ogólnikowo) oraz jak optymalizować zapytania i strukturę bazy tak aby wszystko dobrze działało.

Oczywiście mógłbym pisać tylko o optymalizacji i nie wspominać o budowie, jednak w takim wypadku jest to podanie ryby zamiast wędki.
Nie da się tutaj wszystkich możliwych ścieżek opisać, rozumiejąc jednak zasady działania można w prosty sposób optymalizować wszelkie inne zapytania. Nie są to tylko regułki w stylu: będzie szybciej jeżeli użyjesz tego czy tamtego…

Na początek chciałbym przestrzec że nie widzę siebie jako megaeksperta od wszystkiego. Lubię dłubać i szukać. Optymalizacja i uczenie się jak co działa, to moje małe hobby.

No dobrze to może od początku. MySQL ma wiele silników zarządzających danymi. Na dzień dzisiejszy najczęściej używanymi są MyISAM, InnoDB, Cluster. W kolejnych artykułach postaram się umieścić opisy dla kolejnych silników, łącznie z silnikami które są jeszcze w fazie wytwarzania. Samo rozbicie na kilka osobnych artykułów podyktowane jest ich objętością. Nie sposób w kilku sensownych słowach zawrzeć szereg przydatnych informacji dotyczących tak rozbudowanych mechanizmów.

Wracając do MyISAM’a jest to stosunkowo najprostszy i szybki silnik (jeżeli chodzi o pobieranie danych) z omawianej bazy danych. (more…)

Strach w zarządzaniu

0

Może zacznę od innej strony.

Od wielu lat trenuję trochę sztuk walki. Przez ten czas przyuważyłem kilka interesujących zachowań.
Generalnie uważam (i nie tylko ja zresztą) iż trening jest małym obrazem ludzkiego życia.
Jeżeli ktoś odpuszcza na treningach, odpuszcza wszystkiemu we własnym życiu,
jeżeli zachowuję się agresywnie i przejmuje inicjatywę itd itd. (more…)

Booting process…

1

{

__asm MOV EAX, 0xfffffffff0;
__asm JMP EAX;

}

0day.pl BIOS.

Hit F2 to enter…

Cóż, zawsze przychodzi czas że ktoś musi zacząć pierwszy.
Tym razem padło na mnie… Coprawda pierwszy nie jestem, ale ostatnim też chyba nie będę.

Co się tutaj znajdzie, nie wiem.
W zamiarze mam umieszczać tutaj użyteczne informacje ale kto wie jak to będzie…

Go to Top