ETAG tárolása fájlban
Üdv.
Le szeretnék tárolni egy etag-et a szerveren, amit minden változtatáskor módosítanék, illetve minden lekéréskor ehhez nyúlna a szerver, hogy változott e a megadotthoz képest a helyzet... Annyi a problémám ezzel kapcsolatban, hogy jelenleg nincs memcached, és nem is valószínű, hogy lesz ilyesmi a tárhelyen. Ha fájlban tárolom, akkor minden egyes lekérés azt az egy fájlt akarja majd elérni, tehát valószínűleg az lesz a szűk keresztmetszet az alkalmazásban. Olyan szempontból szerencsém van, hogy egy kis forgalmú oldal lesz, amit csinálok, tehát ennél a projektnél biztosan nem okoz majd gondot. Szerintetek nagy forgalmú oldalaknál az ilyesmi problémát jelenthet?
■ Le szeretnék tárolni egy etag-et a szerveren, amit minden változtatáskor módosítanék, illetve minden lekéréskor ehhez nyúlna a szerver, hogy változott e a megadotthoz képest a helyzet... Annyi a problémám ezzel kapcsolatban, hogy jelenleg nincs memcached, és nem is valószínű, hogy lesz ilyesmi a tárhelyen. Ha fájlban tárolom, akkor minden egyes lekérés azt az egy fájlt akarja majd elérni, tehát valószínűleg az lesz a szűk keresztmetszet az alkalmazásban. Olyan szempontból szerencsém van, hogy egy kis forgalmú oldal lesz, amit csinálok, tehát ennél a projektnél biztosan nem okoz majd gondot. Szerintetek nagy forgalmú oldalaknál az ilyesmi problémát jelenthet?
Kicsit konkrétabban is
Melyik része nem érthető?
Minek a változását indikálja
Bármilyen adatét. Nincs
szerk:
Rosszul olvastam. Ha változik bármilyen adat a szerveren, akkor változik az etag. Az etag a kliens állapotának a megváltozását indukálja, a szerver szempontjából lényegtelen.
Tárold munkamenetben,
De az igazság az, hogy ha PHP-t használsz, akkor már eleve annyi erőforrást pazarolsz el, hogy ezen semmi értelme optimalizálni.
Okés, akkor nem foglalkozok a
A memcached-nek és társaiknak
Én inkább arra gondoltam,
Szerintem a lockolás nagy
Igazad van, alapnak jó ez a
Szerintem is, itt bőven elég
Itt az agyam előrángatja a Single Writer Principle-t, ami valahol jogos, viszont a gugli erre adott találatai mind Martin Thompson blogjára mutatnak, ami CPU architektúra szinten tárgyalja a problémát, és ez talán túl mély ehhez a témához. De azért csak leírtam :), mert egyrészt a téma iránt érdeklődőknek ezek az írások igazi csemegék (Martin Thompson blogja a témában etalonnak számít), másrészt ez nagyban is igaz.
Kicsit visszakanyarodva a témához itt egy async service tud segíteni. PHP-val (önmagában) viszont itt már komoly architekturális falakba ütközöl, valóban külső service kell hozzá. De +1 annak, hogy ezzel a problémával addig ne foglalkozz, amíg nem kerül elő.
Ez a Disruptor, amiről ír
szerk:
Közben tovább olvastam, aztán ja, a nodejs is valami hasonlót használ.
Nem igazán látom, hogy a single writer principle hogyan lenne megvalósítható ennél a fájlba írásos problémánál... Kéne csinálni egy daemont neki, ami queue-be rakja a kéréseket, és azt hívogatni, vagymi? :D A lock is ugyanezt csinálja, nem?
Én is!
Nagyjából akkor öli meg a
Nem tudom jól értem e, a
Engem az is érdekelne, hogy
Ha egy kérés kiszolgálása
Állandó terhelés mellett ez
Szerintem nem jól, ha nagyobb
Persze ha nagyon rövid a hullámhegy (csak egy-két request idejéig tart), akkor nincs probléma egyik esetben sem.
Gondolom a request elején
Mi történne, ha csak a
Semmi
Ha túl sok lesz a kérés,
Inkább az érdekelne, hogy miért kell már a kérés elején lockolni az etag fájlt módosításra, és csak a végén módosítani. Gyakorlati haszna szerintem ennek egyáltalán nincs. Tegyük fel, hogy a tranzakció commit megvolt, de az etag fájl még nem frissült, és ilyenkor jön egy get a szerver felé. Ilyenkor az előző etaggel kapja meg a kérés a friss adatot. Maximum a következő kéréskor újra lekéri ugyanazt az adatot csak akkor már a friss etag-el, vagy ha kesselve volt az adat, akkor úgy veszi, hogy még nem módosult. Ha nem get, hanem mondjuk post kérés jön, akkor az etag annak a szempontjából tök lényegtelen, mert azt nem kesseljük. Szóval összességében szerintem nem kell teljes kérésre lockolni, elég csak arra a néhány mikroszekundumra lockolni a rendszert, amíg a fájl írása megtörténik, vagy esetleg arra a pár milliszekundumra, amíg a commit lemegy az adatbázisban, ha már tényleg alaposak akarunk lenni... Szóval az 5 req/sec helyett simán lehet az akár 1000 req/sec is...
A feladatból kiindulva
Bár pont az lehet mögötte, hogy egyszerre jön két kérés, és mindkettő megállapítja, hogy frissíteni kell. Emiatt lehet értelme végig lockolni, hogy a másodiknak jövő már az új Etag-összehasonlítást csinálja (spórolsz a wrinyóírással), különben ugyanazt az adatot fogják ketten beírni.
De úgy tűnik, neked a sohanapja lesz, mikor változtatni kell rajta.
Azért nem olyan jó az elejére
Nem támogatja maga a szerver
Szerk: ahogy látom neked a dinamikus adatokhoz kellene ETag, ezt sajnos neked kell megoldanod, ha az alkalmazás valami egyedi megoldás...
Ha az adatot nem kell több
Nincsenek mély ismereteim a fájl I/O-ról, de arra tippelnék, hogy amíg csak olvasásra nyitod meg, addig gond nélkül párhuzamosítható a hozzáférés, tehát ha az erőforrás ritkán változik, akkor egy közepes méretű oldalnál sem probléma a fájlhasználat. (Ha gyakran változik, akkor kilockolják egymást a szálaid, és egyszerre csak egy kérést tud a webszerver kiszolgálni, ami egy nagyobb forgalomra konfigurált szervernél úgy tizedére-huszadára veti vissza a kiszolgálási sebességet. Másrészt ha gyakran változik, akkor minek az ETag?)
A gyakran változást nem
Itt a lényeg!
Ne foglalkozz semmivel: csináld fájlban nyugodtan. Eszméletlen kicsi az esélye, hogy egyszerre akarjanak írni, ha mégis: a második vár egy kicsit. De ha a klienstől függ az állapot (kvázi a kliens állapota), akkor nem eleve külön fájlban van minden kliens?
I/O: olvasás szerintem elég gyors, beolvasás után érdemes helyből zárni is a fájlt. Írásnál meg ahogy tgr is mondta: megvárják egymást. Ilyen ritka látogatottságnál erre kb. 0 esélyed van. :)
A kliens állapotát kifejtem
Köszi,
Simán írhatod egy fájlba.
Egy elgondolkoztató cikk
(Persze itt nincsenek párhuzamos lekérdezések, meg talán append módban nyitott fájloknál nem is lockol az írás, de azért érdekes.)
Az én esetemben sem muszáj