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
-~----------~----~----~----~------~----~------~--~---

Reply via email to