Migracija sa MySQL-a na PostgreSQL
From RCUB
(Copy paste poruka sa mailing liste) |
|||
Line 1: | Line 1: | ||
− | + | Ova poruka se najviše tiče BIS i NetIS ekipa. | |
+ | |||
+ | U četvrtak i petak smo obavili testnu migraciju IS Univerziteta sa | ||
+ | MySQL-a na PostgreSQL. | ||
+ | |||
+ | S obzirom da koristimo JPA (Apache OpenJPA) i da nigde nismo koristili | ||
+ | native upite, nisu bile neophodne nikakve prepravke na aplikaciji, osim | ||
+ | stringa za konekciju, korisničkog imena i lozinke. | ||
+ | |||
+ | Ono što je bilo potrebno prepraviti su SQL skriptovi za kreiranje i | ||
+ | insertovanje podataka. Sve promene koje je trebalo obaviti na njima su | ||
+ | lepo dokumentovane na: | ||
+ | |||
+ | http://www.markslade.name/Articles.html?a=9 | ||
+ | |||
+ | Pored navedenih, naišli smo na još dve stvari: | ||
+ | |||
+ | 1. U MySQL-u u insert statmentu za BOOLEAN polje je dozvoljeno staviti | ||
+ | vrednost 1, u Postgresu mora '1' (pod apostrofima) | ||
+ | 2. LONGBLOB u MySQL-u se escape-uje heksadekadno, a BYTEA u Postgresu | ||
+ | oktalno | ||
+ | |||
+ | Pored toga, vredi pomenuti da je UTF-8 podržan i u Postgresu, kao i | ||
+ | srpsko sortianje (zavisi od podešavanja locale-a prilikom kreiranja baze). | ||
+ | |||
+ | U petak nam se učinilo neviđen dobitak u ubrzanju na jednom složenom | ||
+ | upitu (EAGER JOIN, 33 tabele) - od neverovatnih 12 puta. Merenje je | ||
+ | urađeno pod vrlo neravnopravnim uslovima, tako da rezultat nije ni | ||
+ | približan realnosti (izvinjenje Jovani Vuleti za dezinformaciju - ne | ||
+ | treba donositi važne zaključke u petak uveče). | ||
+ | |||
+ | Danas smo ponovili merenje pod koliko-toliko ravnopravnim uslovima (isti | ||
+ | server, isti skup podataka, isti upit, deset ponavljanja). Performanse | ||
+ | za ovaj konkretan upit su bile +30% u korist Postgresa. | ||
+ | |||
+ | Ukoliko je potrebno još informacija, ili pomoć oko migracije, javite. | ||
+ | |||
+ | Obratite takođe pažnju, hijerarhija u Postgresu je baza, šema, tabela. | ||
+ | JDBC string za konekciju prima kao parametar samo ime baze, a ne i šemu. | ||
+ | Tako da je verovatno najlakše kreirati posebne baze i koristiti njihove | ||
+ | default "public" šeme. | ||
+ | |||
+ | psql komande koje vam mogu biti od interesa: | ||
+ | |||
+ | \l - listanje baza podataka | ||
+ | \c - izbor aktivne baze podataka | ||
+ | \dn - listanje svih sema u izabranoj bazi | ||
+ | \du - listanje svih korisnika | ||
+ | |||
+ | CREATE USER username PASSWORD 'l0zinka' - kreiranje korisnika | ||
+ | GRANT ALL ON SCHEMA public TO username; - dodeljivanje privilegija | ||
+ | |||
+ | Da bi ste omogućili pristup serveru preko JDBC-ja odnosno TCP/IP-ja, | ||
+ | potrebno je da u data/postgresql.conf navedete: | ||
+ | |||
+ | listen_addresses = '*' # what IP address(es) to listen on; | ||
+ | port = 5432 # (change requires restart) | ||
+ | |||
+ | i da u data/pg_hba.conf dodate: | ||
+ | |||
+ | # TYPE DATABASE USER CIDR-ADDRESS METHOD | ||
+ | host mydb ognjen 147.91.4.66/32 md5 | ||
+ | |||
+ | JDBC connection string je oblika: | ||
+ | |||
+ | jdbc:postgresql://netis-test.rcub.bg.ac.yu/e_university_v5 | ||
+ | |||
+ | Default port je 5432, drajver je: org.postgresql.Driver. |