ugrás a tartalomhoz

InnoDB utolsó változtatás kioldókkal

Joó Ádám · 2009. Már. 13. (P), 21.06
A minap szükségem lett volna egy InnoDB tábla utolsó módosításának időpontjára, hogy egy állományrendszerben tárolt keresőindex hasonló időbélyegével összevetve eldönthessem, szükséges-e az indexet újraépíteni. Mivel természetesen az élet sosem olyan egyszerű, ahogy azt elképzeljük, lássuk most, hogyan is érhetjük ezt el!

Az ember azt hinné, hogy a tábla adatai tartalmazzák ezt az információt, azonban ez csak MyISAM-nál működik, mivel az InnoDB több táblát tárol egy állományban, tehát marad a barkácsolás.
Szerencsére a MySQL 5-ös kiadása óta ismeri a kioldókat (trigger), így összehozhatunk valamit magunk is. Először készítsük el a megfelelő táblát:
CREATE TABLE `last_modified` (
    `table` VARCHAR(50) PRIMARY KEY,
    `date` DATETIME DEFAULT NULL
) ENGINE = InnoDB;
Majd pedig, feltételezve, hogy az articles tábla változásait kívánjuk nyomon követni, készítsük elő:
INSERT INTO `last_modified` SET `table` = 'articles';
Aztán állítsuk fel a kioldókat:
CREATE TRIGGER `articles_insert`
AFTER INSERT ON `articles`
FOR EACH ROW
UPDATE `last_modified` SET `date` = NOW()
WHERE `table` = 'articles';

CREATE TRIGGER `articles_update`
AFTER UPDATE ON `articles`
FOR EACH ROW
UPDATE `last_modified` SET `date` = NOW()
WHERE `table` = 'articles';

CREATE TRIGGER `articles_delete`
AFTER DELETE ON `articles`
FOR EACH ROW
UPDATE `last_modified` SET `date` = NOW()
WHERE `table` = 'articles';
Ily módon minden INSERT, UPDATE és DELETE kérés futtatása után bejegyzésre kerül a pontos idő (figyelem, csak ezek után, tehát például a TRUNCATE nem old ki).

Igaz én keresőindexhez állítottam össze, de sok más felhasználási területe is akadhat: az adott tartalmat felsoroló oldalakon megjeleníthetjük, vagy küldhetünk az alapján HTTP Last-Modified fejlécet, használhatjuk gyorsítótárazáshoz. Amennyiben pedig a szemantikus HTTP hívei lennénk, akkor ugyanezen eljárást követve készíthetünk egy gone táblát is, melyben a a táblák neve mellett egy kulcsot tárolunk és minden törlést feljegyzünk, ily módon lehetőségünk van rá, hogy el nem érhető tartalom esetén megnézzük és jelezzük a felhasználónak – illetve a 410 Gone állapotkód kiküldésével a böngészőnek – hogy a keresett tartalom valóban létezett, csak időközben szűnt meg.
 
1

innodb_file_per_table

Hodicska Gergely · 2009. Már. 14. (Szo), 11.47
mivel az InnoDB több táblát tárol egy állományban, tehát marad a barkácsolás

innodb_file_per_table = 1

Amúgy meg a trigger teljes mértékben bevett szakkifejezés már nagyon sok éve, értelmetlen fordítani (persze csak akkor ha nem az a cél, hogy ne értsék meg a címet :)).
2

Fordítás

Joó Ádám · 2009. Már. 15. (V), 03.24
Mások is megtették: http://google.hu/search?q=sql+kiold%C3%B3, könyvben is megjelent.
3

Ha mág google

Hodicska Gergely · 2009. Már. 15. (V), 10.51
Magyar oldalakra szűkítve:
sql+kioldó -> 429 találat
sql+trigger -> 24400 találta
5

És?

Joó Ádám · 2009. Már. 15. (V), 15.39
Eszembe se jutott azt állítani, hogy a trigger ne volna elterjedtebb. Ez az informatikai szakkifejezések nagyjával így van. Csak jeleztem, hogy nem én találtam ki.
4

Kiskapu nem mérvadó

Török Gábor · 2009. Már. 15. (V), 10.55
Kiskapura hivatkozni fordítás terén a legrosszabb, amit ember tehet. Szinte olvashatatlanok a Kiskapu kiadványai. Többnyire melléd állok a honosított kifejezések használatában, de most Felhőnek adok igazat; a posztod címét akkor értettem meg, amikor visszafordítottam magamban angolra.
6

Megszokás

Joó Ádám · 2009. Már. 15. (V), 15.46
Az olvashatóság ilyen szempontból teljesen szubjektív kérdés: nekem pl. a Webkonfokon szokott felérni gyomron rúgással egy-egy előadás (restrikció meg applikáció, ugye).
A nemértős-visszafordítóst pedig csak egyszer kell eljátszani, mostantól majd megismered :)
7

A trigger véletlenül épp egy

Fraki · 2009. Már. 15. (V), 17.02
A trigger véletlenül épp egy nagyon jól honosítható szó, nincs vele kiejtésbeli probléma.
8

Érv?

Joó Ádám · 2009. Már. 15. (V), 19.27
És ez már érv a fordítás ellen? Amikor a kioldó épp egy teljesen pontos és képszerű megfelelő?
9

Ez általában érv a fordítás

Fraki · 2009. Már. 15. (V), 22.49
Ez általában érv a fordítás ellen, persze a jó fordítás is érv a fordítás mellett, és a kioldó jó.

Ez az eset egyébként tökéletesen mutatja, hogy a kiadóknak vajmi erejük nincs a szaknyelvhonosítás terén, valószínűleg az ilyen fórumoknak sem, itt legfeljebb csak egymást lehet idegesíteni ezzel. Erejük az eredeti cégeknek van, nekik is főleg akkor, ha monopol helyzetben vannak (MS).

Meg ha már cél, ez sem egyértelmű teljesen. Egyáltalán miért van szükség szaknyelvet fordítani? Ilyesmik merülnek fel, hogy a széles nagyközönség elé kerül a téma (sportnyelv), vagy nem illeszkedik az ejtésstruktúrába (magyarul fonotaktika) (ami itt nem áll fenn), vagy nagy hagyománya lesz... cutting edge technológiát nem szokás fordítani.
10

(kiváltó)

zzrek · 2009. Már. 15. (V), 23.45
(Egyébként szerintem jobb név lenne rá a "kiváltó" mint a "kioldó", egy eseményhez jobban illik.)
11

Szerintem

Joó Ádám · 2009. Már. 16. (H), 00.54
Egyrészt angolul is lehetne cause, de nem az. Másrészt pedig szerintem szép a képisége a kioldónak, és nem utolsó sorban egy főnév jobban hangzik, mint az igenév.
13

"Finger on the trigger"

Gixx · 2009. Már. 16. (H), 15.57
...és még fokozhatnánk :)

Én sem ismertem a "kioldó" kifejezést, mindig is triggerként használtam, de ettől még a szerző előjogának tartom, hogy lefordítja-e vagy sem.

Egyébiránt bár nem tartom magam über SQL gurunak, de egyszerűbb, ha minden táblában van egy
`time_modified` timestamp NOT NULL default CURRENT_TIMESTAMP
oszlop.

És akkor csak
SELECT MAX(`time_modified`) FROM `tabla`;
De ez szigorúan csak szerintem-ketegória :)
15

Törlés

Joó Ádám · 2009. Már. 17. (K), 03.17
Nem lenne rossz, de ezzel a módszerrel a törléseket nem tudod követni.
17

is_deleted

Gixx · 2009. Már. 17. (K), 11.23
Na ez már tényleg favágó módszer, viszont így akár lehetőség van az "undelete" műveletre :)
`is_deleted` tinyint(1) unsigned NOT NULL default '0'
és akkor
SELECT MAX(`time_modified`) FROM `tabla` where `is_deleted` <> 0;
14

(szerintem nem)

zzrek · 2009. Már. 16. (H), 21.08
Szerintem meg a "kioldó"-ja gépeknek, szerkezeteknek van, kiváltani pedig pl. akár eseményeket is lehet. A "kiváltó ok" kifejezés is jól illik ide pl. Ha ez egy nyelvi fórum lenne, most megkérdeném azt is, hogy hogyan értetted ezt a főnév - igenév dolgot.
A lényeg, amit akartam mondani, hogy nekem ha a trigger helyett ha azt mondják, hogy "kiváltó", akkor hamarabb leesik, mintha azt mondják, hogy "kioldó". Lehet, hogy ezzel mások máshogy vannak... (És mindegy, hogy angolul mondhatnák-e, hogy "cause".) Vagyis egy személyes érzésemet akartam megosztani veletek, nem vitatkozni akartam...
16

Gépek, nyelvtan

Joó Ádám · 2009. Már. 17. (K), 03.23
Számomra éppen ebben áll a képisége: megjelennek előttem a megfeszített huzalok, amik arra várnak, hogy a megfelelő esemény kioldja őket és mozgásba lendüljön a szerkezet :)
A főnév dolgot úgy értettem, hogy ha felcsapod a Magyar Értelmező Kéziszótárat, akkor megtalálod főnévként a kioldót (ami persze melléknévi igenév is), a kiváltót azonban nem.
A vitától pedig nem kell félni, semmi rossz nincs abban, a legjobb módja, hogy megismerjük a másik álláspontját.
18

A kioldó lexikalizált főnév,

Fraki · 2009. Már. 17. (K), 14.45
A kioldó lexikalizált főnév, a kiváltó nem. És ugyanabban a köznyelvi környezetben szerepel, mint a trigger, vagyis 1:1 fordításnak tekinthető.

„Szerintem meg a "kioldó"-ja gépeknek, szerkezeteknek van”
Triggere is.
22

Nem érdekel az angol

zzrek · 2009. Már. 18. (Sze), 10.33
Csakhogy nem az a lényeg, hogy angolból magyarra kell fordítani és angolban milyen ilyen-olyan jelentése van a triggernek, hanem az a lényeg, hogy a leginkább érthető legyen magyarban azok számára akik használják, olyan legyen, mintha nem is fordítás lenne.
A "kioldó" azért főnév is, mert fizikailag is létezik kioldó, pl "kioldópecek" stb. Kiváltó meg nemigen, de akár lehetne is, ha mondjuk a sittről kiengedést biztosító óvadék kifizetését igazoló papírt annak neveznénk :-)
A trigger szót hamarabb használták már eseménykiváltásra, mint az informatika megszületett volna, sőt én is hamarabb használtam már mielőtt az informatikában találkoztam volna vele -- az elektronikában már régóta jelen van. Számomra mindig valamilyen esemény, folyamat kiváltásához kapcsolódó jelentése volt és a "kiváltó" szó illeszkedik rá sokkal jobban, mint a kioldó. A kioldó félrevezető, ha ilyet olvasok, akkor azt hiszem, hogy valami másról van szó, és a kioldó-trigger kapcsolat csak nehezen esik le. (Valószínűleg egyébként az angolban is úgy jött át a trigger az informatikába, hogy mechanikus szerkezet - elektronikus szerkezet - szoftveres szerkezet, de magyarban nem így keletkezett, hanem egyszerűen átvettük. Nincs olyan magyarban, hogy kioldó, csak a mechanikus gépekben, az elektronikában is a triggert használják és nem fordították le, kioldóra főleg nem.)

Hibás az az elgondolás, hogy az angol jelentése alapján kell keresni a magyar megfelelőt. Inkább azt kell megnézni, hogy magyarban hogyan mondanánk. Hát szerintem nem kioldónak kéne nevezni. Azt kell megvizsgálni, hogy az emberek hogyan neveznék, ezért jeleztem, hogy én inkább kiváltónak nevezném, mert annak a jelentése közelebb áll ahhoz, ami ténylegesen az. De a legjobb, ha marad a trigger. Ugyanis azt tényleg tudja mindenki, hogy micsoda, aki foglalkozik vele. Aki pedig nem foglalkozik vele, azt nem is érdekli. Nem kell mindent lefordítani, főleg azokat a kifejezéseket nem, amiket egy szakmai közösség már régóta használ.

(!!) Ezért nem használtak az angolban sem más szót a trigger helyett az informatikában sem, mert már egy rokonszakmában már egy bejáratott kifejezés volt.

(!!) Ha egy hivatalos fordításban egy ilyen cikkben lefordítanák a triggert kioldóra, azt nyilvánvalóan hibás fordításnak tekinteném: úgy gondolnám, hogy a fordító nem ért a cikk szakmájához, és ezért fordította le, ezzel téve értelmezhetetlenebbé a cikket.

És mi az eredménye, hogyha egy cikkben mégis lefordítja az író a már bejáratott kifejezést? Hát ez, ami most is történt: nehezebben lesz érthető a szöveg, a cikk mondanivalójáról elterelődik a hangsúly és a figyelem, ráadásul esetleg csodabogárnak nézik a cikkírót (vagy valami hasonlónak). A cikkhez kötött fórumban több lesz a bejegyzés a nyelvi megoldással kapcsolatban, mint a cikk mondanivalójával kapcsolatban.
Ha ez volt a célja a cikkírónak, akkor gratulálok. Ha nem ez, akkor javaslom, hogy legközelebb inkább ne így tegyen.
19

+1 kiváltó ha már mindenképpen magyarosítunk (but why???:-)

Ustak · 2009. Már. 17. (K), 21.19
Oxford Advanced Learner's Dictionary
trigger : noun (...) 2: something, that is the cause of a particular reaction or development...The trigger for the strike was the closure of yet another factory(...)
verb: 1: make something happen suddenly: Nuts can trigger off a violent allergic reaction(...) 2: to cause a device to start functioning: to trigger an alarm / a switch.

Szerintem ilyen "vitáknál" mindig érdemes megnézni, ha van egynyelvű szótár a közelben, hogy milyen kontextusban használják a szót eredetileg. És ha megértettük, képileg elképzeltük, akkor teljesen felesleges magyarra lefordítani, mert a fogalom jelentését érdemes megérteni szerintem. Az angol tele van olyan kifejezésekkel, szavakkal, amit (én legalábbis) meg sem próbálnék magyarra fordítani.
Az informatika nyelve az angol, és kész. Ha két orvos megelégszik azzal hogy scapula, akkor nekünk miért nem jó a trigger :-)

ui: rejtvény: Milyen informatikai kifejezést rejtettek még el a példamondatok egyikében? :-)
20

factory

Poetro · 2009. Már. 17. (K), 22.36
factory
21

off

gex · 2009. Már. 17. (K), 23.11
factory mellett ott van még a switch meg a closure, de ilyen alapon bármelyik napilap főoldaláról is össze lehetne kaparni párat. ;)
12

Mysql trigger hiba...

virág · 2009. Már. 16. (H), 07.48
Helló!

A MySQL-es (InnoDB-s) triggereknél arra vigyázz, hogy a foreign keyekkel meggyűlik a baja... Én belefutottam már ebbe a hibába és eléggé kellemetlen volt.

http://bugs.mysql.com/bug.php?id=11472,

Nem tudom, hogy javították-e, de tavaly még biztosan hibásan, kaotikusan kezelte a MySQL az idegen kulcsokat triggerekből... Ha valakit érdekel csináljon teszteket, valószínűleg égnek fog állni a haja. :-) Mondjuk ez a hiba évek óta ismert és ennyi idő alatt sem voltak képesek rendesen megvalósítani a kioldókat - ez azért eléggé dühítő...
23

Ez inkabb feature, mint

Tyrael · 2009. Már. 29. (V), 00.13
Ez inkabb feature, mint bug.
A kaszkadolasnal a modositas nem kulon statement-kent fut le, ezert nem valtodnak ki ra a triggerek sem, valamint a binlogba sem kerul kulon bele (ez problema lehet az innodb master, myisam slave felallasu replikacioban)

Tyrael
24

Köszi

Joó Ádám · 2009. Már. 29. (V), 23.29
Ezt jó tudni. Nem szép dolog tőle, de ezesetben lehet írni külön kioldót a függő táblákra.