reader

fc

os test

syntaxerror @ indafoto

Összedugtuk a mysql-t a memcacheddel

2009.01.23. 18:03 | Syntax Error | 5 komment

Gőzerővel folyik az új blog.hu fejlesztése, frameworkot írunk és rakjuk le az alapokat ezerrel. Mivel nagy terhelésre készül a rendszer, intenzív cache használattal számolunk. Kézenfekvő dolog a memcached, más nem is nagyon van, gondoltunk még memóriában levő mysql táblára, de a memória méretkorlátja és más okok miatt egyelőre elvetettük.

A cacheléssel szükségszerűen együtt jár az invalidálás problémája, amikor valami változik a cachet azonnal el kell dobni. Erre tűnt nagyon jó megoldásnak amit itt találtunk:

http://dev.mysql.com/doc/refman/5.0/en/ha-memcached-interfaces-mysqludf.html

Ez nem más, mint mysql-ből hívható memcached manipuláló függvények gyűjteménye, ami azt jelenti hogy megfelelően beállított triggerek az adat változásakor automatikusan tudják pl invalidálni az adott elemet a cacheban.

Neki is ugrottunk feltenni, nem volt egyszerű de megküzdöttünk vele. A lépések:

1. innen: http://tangent.org/586/Memcached_Functions_for_MySQL.html forráskód letöltése
2. apt-get install libmysqlclient-dev (szükséges csomag, ebben lakik a mysql_config)
3. innen: http://tangent.org/552/libmemcached.html libmemcached forráskód letöltése (szükséges előfeltétel, csomagban nem elérhető)
4. libmemcached configure, make, make install - ez simán megy, paraméterek nélkül
5. memcached_functions directoryban:
./configure --with-mysql-config=/usr/bin/mysql_config
(a /usr/bin/mysql_config -ot megmondja a which mysql_config)
6. make, make install
7. /usr/local/lib -ből /usr/lib/mysql/plugin -ba másolni mindent ami most létrejött
8. /usr/lib# ln -s /usr/lib/mysql/plugin/libmemcached_functions_mysql.so libmemcached_functions_mysql.so
9. ldconfig
10. mysql restart
11. create function query-k, hogy létrejöjjenek a jó kis függvények. ezek ilyenek:
create function memc_servers_set RETURNS STRING SONAME "libmemcached_functions_mysql.so";

és már kész is van. Ez így összefoglalva nem tűnik bonyolultnak, de volt néhány pont amit elég nehezen sikerült kitalálni ugyanis nem sok infót találtunk róla. Ilyen volt pl hogy kell neki a mysql_config, de hogy azt honnan lehet szerezni arról fogalmunk sem volt.

Beüzemeltük, működik, már csak a triggerek legyártása van hátra. Itt felmerült még egy nehézség: a jelenlegi mysql verzióban egy táblán egy típusú (insert/update) trigger csak egy lehet. Tehát amelyik táblákon már van trigger, ott a meglévő triggerbe kell beleszerelni a memcached hívást, ez kicsit megnehezíti a triggerek automatikus legenerálását, de azért megoldjuk majd.

Címkék: memcached bloghu mysql

A bejegyzés trackback címe:

https://syntaxerror.blog.hu/api/trackback/id/tr36898182

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

szantog · http://szantog.com 2009.01.23. 19:04:02

Amennyiben a teljes model a MySQL-ben van, akkor hajrá. Ha nem, akkor felejtsétek el ezt a trigger izét és irány beledolgozni a modelbe!

A MySQL memóriatáblát ne egyelőre vessétek el, hanem örökre. A read terhelés 99%-át meg tudjátok oldani a memcached-el úgy, hogy a legtöbb futáshoz még csak nem is kell a MySQL-hez csatlakozni.

Syntax Error · http://vino.syntaxerror.hu/ 2009.01.25. 17:30:27

@szantog: végleg azért nem zárnám ki hogy a memtable egy-két éven belül használható cache megoldás lesz, és sokkal komolyabb elérési lehetőségei vannak mint a sima kulcs alapján érték a memcachedben

szantog · http://szantog.com 2009.01.26. 21:46:15

@Syntax Error: A memtable nem replikálható, anélkül pedig egyenlő egy olyan MyISAM adatbázissal, ami befér a RAM-ba.

Syntax Error · http://vino.syntaxerror.hu/ 2009.01.26. 21:59:26

@szantog: két dolog miatt vetettük el, az egyik hogy most még valóban nem skálázható, de idővel clusterbe dugható lesz, és onnantól majd skálázódik. a másik, hogy nem támogatja a változó hosszúságú mezőket (bár erre már van patch, a facebook vagy a google számára készült asszem), és így az adathoz képest irreálisan sok memória kell neki. idővel talán ez is elmúlik.
a myisamot meg inkább hagyjuk, nem tud foreign keyt meg row based lockingot, szóval leginkább eleve felejtő ;)

szantog · http://szantog.com 2009.01.28. 20:56:25

Én is InnoDB, de memtable-ről volt szó, az meg ugye...

A MySQL clusternek meg olyan kemény megkötései vannak, hogy nem véletlenül nem használja egyik nagy se.
süti beállítások módosítása