Honestly, this sounds like a problem for a full-fledged database. With Clojure/datalog, you'll need to persist your records to disk manually. At some point, your thousands of references will start to look like a mini-database anyway. If you can fit your data into a relational schema, use that; if not, try a graph database like Mulgara. -SS
On Oct 8, 10:21 pm, Robert Luo <robort...@gmail.com> wrote: > Hi, I am working on a server project, which requires thousands records > of data stored in memory, and they will be accessed by thousands of > threads simultaneously. > I intend to use datalog to store all my data, sharing the whole > database by a reference. > However, I am afraid of concurrency of this design, say if one thread > changed any piece of the data, the whole data structure must be > protected by dosync, and if another thread try to update it at the > same time (by alter), it may cause retries, and because there are many > many threads, the retries may happen too often. > Another approach is just like in Java, we store each record as a ref, > then we can dosync a single record. It seems like a row level lock > rather than a database level lock in my opinion. Is this correct? > However, this design seems too Java-like and we can not use datalog to > do that. > > Which approach is better? Or is there better design? Thanks for your > opinion. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---