<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Thanks for the answer :)<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On 12 Oct 2017, at 10:17, Chandru <<a href="mailto:chandrashekhar.mullaparthi@gmail.com" class="">chandrashekhar.mullaparthi@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">On 12 October 2017 at 09:01, Benoit Chesneau <span dir="ltr" class=""><<a href="mailto:bchesneau@gmail.com" target="_blank" class="">bchesneau@gmail.com</a>></span> wrote:<br class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all,<br class="">
<br class="">
I’m looking on the best way (in term of concurrency and response speed) to provide a equivalent of compare-and-swap semantic on differs Erlang version with ETS. </blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br class="">
For now what I do is using `select_replace/2` on OTP 20 and for other versions I’m using a pen_server to serialise the writes on this values, making this gen_server a bottle neck. Which is fine for a small list of keys to update. I didn’t find any other solution to do it right now. But maybe someone has an idea?<br class=""></blockquote><div class=""><br class=""></div><div class="">The only thing I can think of is to partition the key space and use multiple ETS tables (with a dedicated process for each).</div></div></div></div></div></blockquote><div><br class=""></div><div>True. I can do that indeed … That may be the easiest thing to do in the long term. </div><div><br class=""></div><div>For now I I did this simple lib: <a href="https://gitlab.com/barrel-db/lab/ets_cas" class="">https://gitlab.com/barrel-db/lab/ets_cas</a> with limited test coverage. </div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""><br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Also something I’m currently missing is the possibility do the dame for delete. `select_delete` isn’t atomic right?<br class=""></blockquote><div class=""><br class=""></div><div class="">Not sure what you mean by 'atomic' here. I expect ETS will delete whatever entries have matched this specified pattern at that point in time. In the context of ETS operations, the consideration of whether it is 'atomic' or not makes sense in the 'insert', 'replace' or 'update' scenario.</div></div></div></div></div></blockquote><div><br class=""></div><div><br class=""></div></div>I’m not sure what’s the difference between a delete and a replace there with the current ETS librarie 20.1 . By atomic I mean atomic at the key level, ie 2 concurrent delete  will be serialisable which seems to be the case for `select_replace` .<div class=""><br class=""></div><div class="">Benoit.</div></body></html>