Partitioning u 5.5
MySQL Enterprise Server je doneo nekoliko zgodnih novina vezano za partitioning.
Osnovne dve novine su:
1. LIST i RANGE COLUMNS
2. PARTITION MAINTENANCE alati najzad svi rade kako treba
Posto smo o partitioningu kao takvom vec pisali zadrzacu se samo na novostima.
RANGE COLUMNS je prva zgodna novost. U 5.1 smo morali da pisemo ovako:
CREATE TABLE `user`(… `user_employed` DATETIME …)
PARTITION BY RANGE (to_days(`user_employed`))
PARTITION p2008 VALUES LESS THAN (to_days(’2009-01-01′)),
PARTITION p2009 VALUES LESS THAN (to_days(’2010-01-01′)),
…
);
Dok u 5.5 to radi mnogo zgodnije:
CREATE TABLE `user`(… `user_employed` DATETIME …)
PARTITION BY RANGE COLUMNS (`user_employed`)
PARTITION p2008 VALUES LESS THAN (’2009-01-01′),
PARTITION p2009 VALUES LESS THAN (’2010-01-01′),
…
);
Jos je zgodniji LIST COLUMNS koji nam daje mogucnost da particionisemo:
CREATE TABLE `t1`(`id` int, `country` varchar(100),…)
PARTITION BY LIST COLUMNS (`country`)
PARTITION europe VALUES IN (‘Paris’, ‘London’, ‘Belgrade’),
PARTITION africa VALUES IN (‘Capetown’, ‘Cairo’, ‘Abuja’),
PARTITION asia VALUES IN (‘Tokyo’, ‘Hangzhou’, ‘Ankara’),
…
);
Alatke za maintenance su sve tu i sve rade kako treba (najzad):
• ALTER TABLE … DROP PARTITION
• ALTER TABLE … REORGANIZE PARTITION
• ALTER TABLE … ADD PARTITION
• ALTER TABLE … COALESCE PARTITION
• ALTER TABLE … REBUILD PARTITION
• ALTER TABLE … OPTIMIZE PARTITION
• ALTER TABLE … ANALYZE PARTITION
• ALTER TABLE … REPAIR PARTITION
• ALTER TABLE … CHECK PARTITION
• ALTER TABLE … TRUNCATE PARTITION
A informacije o particijama je moguce izvaditi na “standardne nacine”:
• SHOW CREATE TABLE
• SHOW TABLE STATUS
• INFORMATION_SCHEMA.PARTITIONS
Znacajna novost je “EXPLAIN PARTITIONS SELECT”. Sada je moguce traziti od EXPLAIN-a da navede tacno koje ce particije “pipati” pri izvrsenju upita :)
Ukratko, to je to, evo ga i kraci keynote sa par primera
MySQL, Partitioning
innodb fud – iliti niko ne ukida InnoDB, iskulirajte
Krenulo je jutros sa cimom preko icq-a, drugar je pitao sta je to sa mysql-om i gde nestaje innodb, ja sam iskulirao posto sam pretpostavio da ostali umeju da citaju ali danas me cimnulo preko 50 “zabrinutih drugara” a twiter i ekipa su puni polupismenih uplasenih kretena koji sire fud… dakle
InnoDB je i dalje GPL i dalje je sve open source i sve je isto kao sto je i bilo. Ono na www.mysql.com sajtu su cene sa support i licence, ako koristite gpl sve je ISTO kako je i bilo!!!
reference:
http://www.mysql.com/products/community/
http://blogs.oracle.com/mysql/2010/11/mysql_community_edition_and_innodb.html
Dakle iskulirajte, niko nece da ukine MySQL!!!
Novo u 5.5
MySQL 5.5 donosi neke lepe novine… svratite na sutrasnje predavanje na fonu u okviru kampanje blogeri studentima ako ste zainteresovani :)
odziv je bio super, hvala! nadam se da vas nisam presmorio. par slicki sa prezentacije
keynote kao pdf je dostupan ovde.
A evo ga i na scribd-u
MySQL, What’s New in 5.5
Ne vredi
Kako su krenule glasine da ce nas Orakle kupiti a kako je (bar meni) odavno poznato da je Orakle potpuno windows-centric firma (iako njihov glavni proizvod najbolje radi na Solarisu, iako poseduju svoju distribuciju Linuxa 100% desktop masina u Oraklu je na windowsu i sve interne aplikacije zahtevaju – windows + internet explorer) resih ja da ponovo oprobam te Windowse da vidim da li je to dospelo na neki nivo da moze da se koristi.

Ko me poznaje, zna da ja na svim masinama imam Linux. Uglavnom je to neka Fedora i uglavnom ili starija F10 ili novija F13. Jedino na jednom od laptopova ima OSX (bilo bi bas glupo na kmeka staviti Linux :D ) ali taj lap sluzi samo za rad na putu, rad na njemu kao “glavnoj” masini je (kao i na svakom lapu) preveliko smaranje. Ta masina je spominjana vec u prici o kvalitetu novih apple masina. Kako potencijalna kupovina od strane Orakla (u slucaju da ja pristanem da predjem kod njih) znaci da cu morati sve interne alate da teram na Windowsu to bi znacilo da cu ili mnogo vremena u toku dana provoditi u virtualnoj masini (imam par XP i jednu win7 virtuelnu masinu u virtualbox-u i to radi ok) ili da cu desktop masinu prebaciti na Windows. Kako sam vec imao veliko iskustvo sa svim windowsima do XP sp3 za njih znam da nema sanse da mi zadovolje osnovne desktop potrebe, Vistu sam probao par nedelja i zakljucio da je kompletan promasaj te je odluka pala na win7 koji je trcao vec (rc verzija) u virtual boxu i radio prilicno lepo. Taman posto sam kupio i par igrica reko da setujemo na desktop masinu Win7 pa da vidimo kako to tuto kompleto radi, da li moze to da nekako prodje kao desktop.
Kako OS naravno placa firma pitao sam sta ima i naravno dobio Windows 7 Ultimate Edition. Instalacija je prosla bezbolno i sve je radilo “iz prve”, instalirana je 64bitna verzija Windowsa 7. I u startu je sve delovalo da radi kako treba. Za detaljnije razumevanje clanka bitno je znati na kakvu je masinu dosao taj Windows. Dakle masina je Intel I7 na 3.2GHz sa 12G najbrzeg rama koji je mogao da se kupi u Beogradu, GigaByte ploca sa Intel HW raidom na sebi koji je terao 4x1T WD BLACK sata diskove u 1+0 raidu + 2 SSD diska u RAID0 kombinaciji. Video sistem cini NVidia GTX295 sa 1xsamsung 1680×1050 + 1xdell 1280×1024. Dakle masina nije za bacanje i Windows bi trebalo da radi tu bez problema. Nista od dodatnog hardware-a (osim misa i tastature) nije zakaceno na tu masinu (stampaci, skereni, faxovi, ruteri … sve je to na lanu nista nije zakaceno direkt) tako da problema sa drajverima nije bilo :).
Posle instalacije i setovanja sistema, instaliranja nekih osnovnih alata (Firefox, Thunderbird, Putty, X-Win) prva stavka je bila “microsoft je napravio shadow backup na ovim windozama, to navodno radi kao time machine ma macu a isti mi je spasao cudo podataka, aj da ukljucim to” – PRC, prvi problem, shadow backup ne radi ako na bilo kom disku imate neku particiju koja nije “windoze kompatibilna” ?!?!?!? tako da je zbog postojece linux particije na disku shadow service prijavljivao neku “unknown error” i nije umeo da nastavi. Tu je palo prvo razocaranje, ali resih da nastavim i da koristim ovaj operativni sistem minimum mesec dana pre nego ga kompletno odbacim. Vecina aplikacija je trcala sa druge masine kroz X-Win sa linuxa direktno tako da ovde nije bilo potrebe cak ni za Open Office-om. Vrlo birzo su pale instalacije nekih alata koje koristim redovno za posao i za hobby pa je tu dosao CoCreate (CAD program), Alegro (CAD program), Art Of Illusion (3D modeling tool), NetFabb Professional (STL repair tool), MPLAB + PICC + C18 + C30 (PIC development tools), Win AVR + AVR Studio (ATMEL development tools), MS Visual Studio 2008, ECLIPSE (sa milion plaginova sto za embedded sto za “normalno” programiranje) … a odmah zatim i par originalnih igrica koje su cekale na priliku za instalaciju – Dragons Age, Half Life 2 orange pack .. U prvom trenutku, to je sve delovalo ok. Sve je na masini bilo legalno, nesto open source nesto placeno.. sve bi trebalo da radi ok .. sve je tako i delovalo ali ..
Trebalo je malo vremena ponovo se privici na Windows. Fontovi izgledaju drugacije nego na Linux-u i OSX-u, ikone su drugacije, meniji su na drugim mestima, tastatura se skoro ne koristi – vecina shortcuta ne radi, non stop vam je mis u ruci .. sve sam to nekako prevazisao dok nije krenuo prvi ozbiljan problem da se desava. Malo malo pa iz igre izletim nazad u windoze, nekad se samo masina smrzne a nekad uspe da se oporavi. Onda je to pocelo da se desava i sa flash-om, malo malo pa flash dangne windoze – tj. windoze prijave da je drajver za grafiku “kaput” i da je morao biti resetovan. Ok, lepo od njih sto nisu umrli skroz, ali sta fali mom drajveru za grafiku, ili – sta fali mozda ovoj grafickoj, kostala je ko necija godisnja plata!!! Internet, google, posle 2 dana jurcanja, otprilike stvari stoje tako da 64bitna windoza 7 sa 64bitnim nvidia drajverima kada imate vise od jednog gpu-a (da ovaj 295 je sa 2 procesora na kartici) nvidia drajver oce tako ponekad da puca :( … dobro .. sad da bi proverio celu tu varijantu, prebacim se ja na linux, malerisem graficku max 8h bez promena, vratim se na windoze – dange za 5 minuta … ok, aj da vidimo 16bita Win7 .. nateramo ga nekako da se instalira, drajveri, kuku lele .. radi, jedan dan, dva dana .. sljaka 1/1 .. doduse vidi 2 umesto 12G rama ali radi … Koga sad ja tu da uvatim za gusu, microsoft ili nvidiju. NVidia je napravila ok drajver za linux, eno ga 64bita i radi 1/1, napravili su i ok 32bitni drajver za win7 .. sta je to Microsoft ovoga puta uradio da je NVidia + 64bitni Win7 varijanta postala nepozeljna ne znam, ali bice da sam mogao da kupim 500E jeftiniju graficku i da imam mnogo manje problema :(… To je prvi ekser u kovcegu
Spomenuo sam da se u masini pored “normalnih” diskova nalaze dva SSD diska u stripe-u (beskonacno veliki io troughput :D ), Windows taj disk koristi za neko “ubrzavanje”, nemam pojma kako to tacno radi, nisam se preterano brinuo o tome ali valjda je fora da swap i nekakav cache drzi na tom disku posto je mnogo brz. Sve u svemu, to bi kao trebalo da znaci, u realnom svetu sa 12G od kojih je 3-4 uglavnom uvek prazno nema mnogo znacaja. Na istom tom disku (volumenu) se nalazi i windows temp direktorijum, ie temporary files i sve ostalo “temp” sto na windozi ume da se namesti. Jeli, kad tu vec ima 512G sto da ih ne iskoristim :). Znam da bi bilo lepo staviti sistem na takav disk (jo brzineeeeeeeee) ali obzirom da znam koliko cesto SSD diskovi crkavaju (imam klijenta kome je crklo 4 komada za mesec dana, drugog klijenta kome je za zadnjih 6 meseci crklo 4 komada ..) ja na SSD-ove stavljam “scratch disk” i eventualno ih koristim za razne MySQL Cluster benchmarke. Kako je ovde, kao sto sam rekao, na windozi na tom SSD-u samo TEMP i taj njegov “ubrzavac” nedostatak tog diska ne bi trebao da napravi nikakav problem zar ne? Kako mi je trebao SSD da nesto iztestiram, prebacio sam taj SSD volume na drugu masinu kresno windoze i “puf” iako se sve butovalo “kako treba” gomila stvari se cudno ponasalo, malo malo pa se windows “kocio”, “seckao” … bilo je ocigledno da nije “lako” prihvatio to da mu TEMP drajv nije dostupan (iako je poceo da zvrlja temp fajlove po C:\Windows\temp). Znam da nije “znacajno”, ali mene je ovo vrlo razocaralo…
Da se vratimo korak nazad, masina se nalazi iza firewall-a, na masini se vrte iskljucivo placeni programi, nikakav spyware, mailware, *ware nije na masinu instaliran, na masini je “microsoft security essentials” (ili kako se vec zove taj microsoft antivirus software koji ide uz win7) sa ukljucenim real time ovo ono, ta masina ne ide po torentima, porno sajtovima, ne trazi krekove, fixove .. dakle prilicno offline masina ako iskljucimo gigabajta poslovnom maila u Thunderbirdu i putty-a kojim se izlazi van. Nisam pogasio one smaracke provere windowsa (jesi siguran da oces da ti program uradi ovo i ono).. Jeste u masinu par puta bocnut neki cd, tu i tamo po neki flash disk .. Elem, rekoh korak nazad, onaj SSD volume koji je sisao sa windoze zaboden je u jednu drugu masinu zarad nekog testiranja koje je drugar hteo da izvede, odnesosmo diskove kod njega, zabosmo u njegovu masinu, njegova ploca prepozna raid koji je vec bio kreiram (odusevljenje kod obojice posto su ploce razlicite ali sa istim intelovim chipsetom), butnusmo masinu i EKSER!! Sunce ti poljubim kad je masina krenula da visti i pisti … virus ovaj, mailware onaj, trojan, work kuku lele, crvena blinkcuca slova i brojke i zavijanje iz zvucnika … ja sam ostao zbunjen dok je ortak pao sa stolice od smeha… kroz plac mi je rekao “nije qme windows za tebe”.
I sta ja sada da kazem na to. Svasta mi je na Windowsu smetalo, GUI je lep ali nije logican, start meni je super zamisljen ali je search kroz start meni prestao da radi posle 30tak dana, Ume da vidi svih 12G rama ali nema drajver za graficku sa 2 procesora… preziveo sam i to sto mi jedno 70% aplikacija za windows nisu radile (ni u kakvom kompatibiliti modu, ni sa kakvim permissionima … prosto ne rade), ok verovatno ce sledece godine izaci novije verzije tih aplikacija koje ce raditi ok, ali, mnooogo toga tu ne radi, vidim da je kernel dobar, nije ga lako zabosti, prilicno je otporan… gui je isto lep, doduse fale mu virtualni desktopi, znam da ima za to “add-on” ali probao sam jedan “skup” i jedan “dzaba” i oba su mi usporila masinu 20% i nisu mi dali ni pola od onoga sto imam sa obicnim compizom na linuxu ..
Ovaj DELL ekran je 4:3 19″ zato sto imam 4:3 19″ touch screen panel koji stoji na njemu. Ovih par meseci koliko sam koristio Win7 taj panel je skinut posto – win7 prosto ne ume da ga koristi, iako je 3m napravio drajver za win7 to sa windozom prosto ne moze da radi kako treba, ne logicno se ponasa .. “nije to to” … Snimiti PDF na Windowsu je svetogrdje, nijedan program to ne podrzava nativno, Adobe PDF kreator kosta ko bubreg (stvarno nisu normalni), hvala google-u pronasao sam neki free pdf kreator koji je prilicno dobro odradio posao za ovih par meseci, ali u poredjenju sa Linuxom (ili jos gore, sa OSX-om) daleko je to od “prijatnog”. Sve u svemu, posle nekoliko (vise od 3 – delovalo je kao vecnost) meseci rada na Windowsu juce mi je definitivno pukao film i vratio sam se na Linux (fedora13) koji taaaaaaaaaaaako lepo radi, sve je na mestu, sve je logicno, sve funkcionise … i nema virusa.
Stvarno sam probao, “majke mi”, nekoliko meseci, radio svaki dan na windozi, samo na windozi, startovao doduse cesto firefox sa linuxa kroz x-win kako bih zavrsio neke stvari, startovao open office sa linuxa (kroz x-win) i jos gomilu aplikacija koje imam samo na linuxu … provodio vecinu vremena u putty-u, i na sve to, uz svu tu pomoc mojih ostalih masina windows nije uspeo da se zadrzi kao desktop. Ovde se kao desktop vraca Fedora, videcu da li ce Dragon’s Age da radi sa wine-om, ako ne, boze moj sta da se radi… ionako nemam mnogo vremena za igranje… za ostalo, tu je uvek VirtualBox
Sortiranje po azbuci (azbuka i mysql)
Као земља са два равноправна писма нисмо баш “стандардни” разним произвођачима програмских пакета са пуном подршком за наш, Српски, језик. Поред “смећа у бази”, врло чест проблем везан за карактер сетове у MySQL-у и Српски језик је
- Сортирање – проблем са сортирањем је прилично смарајући пошто ако имамо садржај писан и латиницом и ћирилицом и пробамо да га сортирамо, прво ће бити сортиран латинични текст по абецеди а затим ће бити ћирилични текст по азбуци, смор, знам
- Поређење – проблем са поређењем је још већи, ако имамо садржај који меша ћирилицу и латиницу (на пример форум где су неки постови латинични а неки ћирилични) претрага тог садржаја ће враћати половичне резултате пошто “иницијализација” и “inicijalizacija” неће бити препознати као иста реч. Многи то решеавају тако што бране да садржај буде на више писама те конвертују сваки текст у једно писмо (најчешће у латиницу пошто је конверзија из ћирилице у латиницу једнозначна и једноставна док обрнуто не бажи).
MySQL а и остали РДБМС који имају потпуну подршку за карактер сетове подржава колације. Колација је сет правила који дефинише како се неки карактер сет понаша у одређеном језику. Ту се дефинише:
- тежина сваког карактера (сортирање)
- једначење карактера (сортирање, поређење)
- контракције (њ==nj na primer)
- експанзије (MySQL их тренутно не подржава)
- …
MySQL долази уз брдо колација за UTF8 карактер сет али ниједна од тих колација не ради посао за Српски језик. На срећу, MySQL дозвољава кориснику да дода своју колацију без рекомпајлирања самог сервера. Екстерне колације се налазе у character_sets_dir директоријуму.
Да би сте додали Српску колацију у MySQL потребно је да у Index.xml фајл у character_sets_dir директоријуму
mysql> show variables like 'character_sets_dir'; +--------------------+-----------------------------------------------------------+ | Variable_name | Value | +--------------------+-----------------------------------------------------------+ | character_sets_dir | /usr/local/mysql-5.5.5-m3-linux2.6-x86_64/share/charsets/ | +--------------------+-----------------------------------------------------------+
у секцији UTF8 додате нову колацију, дакле испод:
<charset name="utf8">
<family>Unicode</family>
<description>UTF-8 Unicode</description>
<alias>utf-8</alias>
<collation name="utf8_general_ci" id="33">
<flag>primary</flag>
<flag>compiled</flag>
</collation>
<collation name="utf8_bin" id="83">
<flag>binary</flag>
<flag>compiled</flag>
</collation>
</charset>
додате:
<collation name="utf8_serbian_ci" id="1200">
<rules>
<reset>\u0410</reset>
<i>A</i>
<i>a</i>
<reset>\u0411</reset>
<i>B</i>
<i>b</i>
<reset>\u0412</reset>
<i>V</i>
<i>v</i>
<reset>\u0413</reset>
<i>G</i>
<i>g</i>
<reset>\u0414</reset>
<i>D</i>
<i>d</i>
<reset>\u0402</reset>
<i>\u0110</i>
<i>\u0111</i>
<i>\u0189</i>
<i>Dj</i>
<i>DJ</i>
<i>dj</i>
<reset>\u0415</reset>
<i>E</i>
<i>e</i>
<reset>\u0416</reset>
<i>\u017D</i>
<i>\u017E</i>
<reset>\u0417</reset>
<i>Z</i>
<i>z</i>
<reset>\u0418</reset>
<i>\u0419</i>
<i>\u0439</i>
<i>I</i>
<i>i</i>
<reset>\u0408</reset>
<i>J</i>
<i>j</i>
<reset>\u041A</reset>
<i>K</i>
<i>k</i>
<reset>\u041B</reset>
<i>L</i>
<i>l</i>
<reset>\u0409</reset>
<i>\u01C7</i>
<i>\u01C8</i>
<i>\u01C9</i>
<i>Lj</i>
<i>LJ</i>
<i>lj</i>
<reset>\u041C</reset>
<i>M</i>
<i>m</i>
<reset>\u041D</reset>
<i>N</i>
<i>n</i>
<reset>\u040A</reset>
<i>\u01CA</i>
<i>\u01CB</i>
<i>\u01CC</i>
<i>Nj</i>
<i>NJ</i>
<i>nj</i>
<reset>\u041E</reset>
<i>O</i>
<i>o</i>
<reset>\u041F</reset>
<i>P</i>
<i>p</i>
<reset>\u0420</reset>
<i>R</i>
<i>r</i>
<reset>\u0421</reset>
<i>S</i>
<i>s</i>
<reset>\u0422</reset>
<i>T</i>
<i>t</i>
<reset>\u040B</reset>
<i>\u0106</i>
<i>\u0107</i>
<reset>\u0423</reset>
<i>U</i>
<i>u</i>
<reset>\u0424</reset>
<i>F</i>
<i>f</i>
<reset>\u0425</reset>
<i>H</i>
<i>h</i>
<reset>\u0426</reset>
<i>C</i>
<i>c</i>
<reset>\u0427</reset>
<i>\u010C</i>
<i>\u010D</i>
<reset>\u040F</reset>
<i>\u045F</i>
<i>\u01C4</i>
<i>\u01C5</i>
<i>\u01C6</i>
<i>Dz</i>
<i>DZ</i>
<i>dz</i>
<reset>\u0428</reset>
<i>\u0448</i>
<i>\u0160</i>
<i>\u0161</i>
</rules>
</collation>
рестартујте MySQL сервер и воила, имате нову колацију:
mysql> show collation like '%serbian%'; +-----------------+---------+------+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +-----------------+---------+------+---------+----------+---------+ | utf8_serbian_ci | utf8 | 1200 | | | 8 | +-----------------+---------+------+---------+----------+---------+ 1 row in set (0.00 sec) mysql> select 'latinica' = 'латиница'; +---------------------------------+ | 'latinica' = 'латиница' | +---------------------------------+ | 0 | +---------------------------------+ 1 row in set (0.00 sec) mysql> select _utf8 'latinica' collate utf8_serbian_ci = _utf8 'латиница' collate utf8_serbian_ci; +----------------------------------------------------------------------------------------------+ | _utf8 'latinica' collate utf8_serbian_ci = _utf8 'латиница' collate utf8_serbian_ci | +----------------------------------------------------------------------------------------------+ | 1 | +----------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)





