[erlang-questions] Cross OTP version compare-and-swap semantic on ETS

Sverker Eriksson sverker.eriksson@REDACTED
Thu Oct 12 13:44:32 CEST 2017

On 10/12/2017 01:15 PM, Benoit Chesneau wrote:
> Thanks for the answer :)
>> On 12 Oct 2017, at 10:17, Chandru 
>> <chandrashekhar.mullaparthi@REDACTED 
>> <mailto:chandrashekhar.mullaparthi@REDACTED>> wrote:
>> On 12 October 2017 at 09:01, Benoit Chesneau <bchesneau@REDACTED 
>> <mailto:bchesneau@REDACTED>> wrote:
>>     Hi all,
>>     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. 
>>     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?
>> The only thing I can think of is to partition the key space and use 
>> multiple ETS tables (with a dedicated process for each).
> True. I can do that indeed … That may be the easiest thing to do in 
> the long term.
> For now I I did this simple lib: 
> https://gitlab.com/barrel-db/lab/ets_cas with limited test coverage.
>>     Also something I’m currently missing is the possibility do the
>>     dame for delete. `select_delete` isn’t atomic right?
>> 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.
> 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` .

All ets:select* functions are atomic per table object.
That is, each match-and-* operation is atomic. The iteration is not.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20171012/b6bcdff5/attachment.htm>

More information about the erlang-questions mailing list