Clojure paměťová databáze rubrika: Programování: Jiné

8 Občan
položil/-a 28.2.2015

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?

odkaz Vyřešeno
5 Havri
odpověděl/-a 1.3.2015

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ší.

Komentáře

  • Občan : Ano, šlo. Když už budu mít uložený poslední stav, tak dokonce mohu aplikovat diffy pozpátku. Ale stále mám pocit, že to lze vyřešit elegatnější cestou, něco jako append only db. Každpopádně super nápad, že nemusím počítat diff, když diff je stejný, jako event. 1.3.2015
  • Augi : Aneb použít Event Sourcing :-) 1.3.2015
  • Občan : Vzpomenu na Hanzlíka a jeho "No nekupte to, když je to tak levný" a prohlašuji "No neimplementujte to, když to má pattern s názvem" a jdu touhle cestou. Dík za komenty. 3.3.2015

Pro zobrazení všech 2 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.