<div dir="ltr"><br><br><div class="gmail_quote">On Thu, Sep 4, 2008 at 10:38 AM, Richard Carlsson <span dir="ltr"><<a href="mailto:richardc@it.uu.se">richardc@it.uu.se</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="Ih2E3d">Jacob Perkins wrote:<br>
> T = fun(Term, Key) -><br>
>          [Dict1] = mnesia:read(Table, Term),<br>
>          Dict2 = dict:store(Key, Val, Dict1),<br>
>          ok = write_val(Table, Term, Dict2)<br>
>      end.<br>
<br>
</div>I think the problem is not the updates to the dict itself, but the<br>
fact that you are moving the entire dicts in and out of mnesia<br>
(whose storage is based on ets/dets tables, which do not share memory<br>
with your process). Each transaction thus consists of 1) a huge copy<br>
out, 2) relatively minor rewrite of the dict structure, 3) copy entire<br>
new structure back. You'll be better off just using a mnesia table (or<br>
several) for your key/value data.<br>
<font color="#888888"><br>
    /Richard<br>
</font></blockquote></div><br><div>The reason for the dicts and not separate tables is that I don't know the initial Terms (string keys to lookup dicts) beforehand, and the number of possible Terms is fairly large. The Terms would have to be converted to atoms in order to be table names, which are limited.</div>
<div><br></div><div>The table is for a term-document index, where given a term, I want a list of document ids with their relative weight. So at indexing time, I need to store a document id and a weight for a given term. I can put an upper limit on the number of documents (right now I'm hoping it could be as high as 50k), and in practice the number of terms would probably be much less, but could be as many as 10k.</div>
</div>