InnoDB utolsó változtatás kioldókkal
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:Majd pedig, feltételezve, hogy az Aztán állítsuk fel a kioldókat:Ily módon minden
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
■ 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;
articles
tábla változásait kívánjuk nyomon követni, készítsük elő:INSERT INTO `last_modified` SET `table` = 'articles';
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';
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.
innodb_file_per_table
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 :)).
Fordítás
Ha mág google
sql+kioldó -> 429 találat
sql+trigger -> 24400 találta
És?
Kiskapu nem mérvadó
Megszokás
A nemértős-visszafordítóst pedig csak egyszer kell eljátszani, mostantól majd megismered :)
A trigger véletlenül épp egy
Érv?
Ez általában érv a fordítás
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.
(kiváltó)
Szerintem
"Finger on the trigger"
É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
És akkor csak
Törlés
is_deleted
(szerintem nem)
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...
Gépek, nyelvtan
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.
A kioldó lexikalizált főnév,
„Szerintem meg a "kioldó"-ja gépeknek, szerkezeteknek van”
Triggere is.
Nem érdekel az angol
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.
+1 kiváltó ha már mindenképpen magyarosítunk (but why???:-)
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? :-)
factory
off
Mysql trigger hiba...
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ő...
Ez inkabb feature, mint
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
Köszi