Clojure paměťová databáze rubrika: Programování: Jiné
V Clojure mám vlastní paměťovou databázi pro, což je důležitý, deskovou hru.
Na začátku save hry byl primitivní, stačilo zavěsit watchera a v paralelně perzistovat při každém tahu celý stav, jelikož
load i save hry není už tak náročný na čas, jde to krásně. Následně jsem přidal do hry pattern undo/redo, takže původní strom stavu hry má v čase více kořenů.
Opět můžu ukládat vždy v čase poslední stav stromu. V souborech vznikají duplicity, ukládám zbytečně vše. A dostávám se k tomu, kde jsem v
tom zapletl, jak špuntový sluchátka vytažený z kapsy.
Mohu si udělat funkci která vytáhne rozdíl mezi stavy (defn map-difference [prevState state]... a ukládat pouze diffy, jenže, potom load diffu po diffu z disku a aplikování na state, abych dostal původní stav je časově už hrozně náročný a celkově "divný".
Takže ideálně bych rád uložil přímo celý strom v čase, všechny kořeny v čase, tedy po druhým tahu uložit něco, jako je zde.
Po hodinách žádání pana Google o nápad a procházení zdrojáku Clojure, to zkouším zde.
Jinak rečeno v tom undo/redo si držím reference na stavy stromu ve vektoru [stav1, stav2, stav3] a potřebuji ho uložit v podobně optimalizovaný podobě, jako to dělá Clojure v paměti. Nějaký nápad?
Nejde si uložit každý tah a při loadu zkrátka všechny načtené tahy aplikovat na prázdnou hrací desku? Tj. ukládat si všechny události, které mění stav aplikace a tyto události pak jen při loadu znovu všechny aplikovat? Pokud by načtení nebylo dostatečně rychlé, můžeš jednou za čas opravdu uložit aktuální stav aplikace a starší události, které vedly k tomuto stavu, smazat a ukládat jen novější.
Pro zobrazení všech 2 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře