Hi:<br><br><div class="gmail_quote">On Wed, Jun 9, 2010 at 9:46 PM, Denis Papathanasiou <span dir="ltr">&lt;<a href="mailto:denis.papathanasiou@gmail.com">denis.papathanasiou@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

I know that using keys() can be inefficient, as per the warnings in the docs.<br>
<br>
I do need to calls keys() in the following scenario, though, so I was wondering if there was anything I could do to make it run faster:<br>
<br>
A db that stores temporary session data has as its key a guid, prefixed by a unix timestamp. The associated value is just another guid identifier (which is unrelated to the one in the key).<br>
<br>
Since the session data is temporary, I have a function which examines all the keys, and removes every key/value pair older than n seconds (it&#39;s a simple calc using the unix timestamp prefix in the key).<br>
<br>
I realize that I could restructure the db so that the unix timestamp is part of the value, and by adding a secondary index on it, I could get all the keys older than n.<br>
<br>
But, restructuring it and doing all the tests will take time, so in the interim, is there anything I can do to make using keys() more effective?<br></blockquote></div><br>I don&#39;t know how to make keys() faster, but if you have prefixed the timestamp properly, that means making sure it sorts properly, you don&#39;t need a keys(), just a cursor. The key will sort properly if you have used a decimal o hex ascii representation ( as presently timestamps are all 9 dec / 8 hex digit numbers ), or if you store it in binary starting with the MSB ( I never remeber wether this is little or big endian ). In this case just make a key which is only the limit timestamp and start iterating from the start until you get to a greater value and you&#39;re done, this can be done easily using a cursor.<br>

<br>F.O.S.<br>