2007/4/16, Ludovic Coquelle <<a href="mailto:lcoquelle@gmail.com">lcoquelle@gmail.com</a>>:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br><br>In my application, I have to store a huge (but sparse) 2D matrix. I implemented that successfully using dict-of-dict kind of structure.<br><br>I was then thinking to use a ets-of-dict structure: each line is a dict (containing all colum values) and I store each line (a dict) as an entry of a ets structure.
<br>But I read in the doc introduction of ets that "In the current implementation, every object insert and
look-up operation results in one copy of the object.". Does this means that each access (even read) to an element of my matrix would imply a new dict copy?<br>
</blockquote></div><br>Yes. While ets outperforms all other alternatives for random access for sets<br>of small objects (at least sets of size > 20), it doesn't necessarily do so for<br>large objects.<br><br>But if a dict-of-dict structure works, you might want to consider just using an
<br>ordset ets table. If you have a tuple as the key in an ordset table, ets:select(),<br>using a pattern where the first part of the key is bound, will be very efficient.<br><br>You can also create ets tables where the tuples stored have only one element -
<br>the key. Mnesia doesn't let you do that, but ets does.<br><br>BR,<br>Ulf W<br>