Concurrency 键/值存储如何管理并发性?
我读过许多文章,其中指出键值存储只需要两种操作:Concurrency 键/值存储如何管理并发性?,concurrency,key-value,atomicity,key-value-store,Concurrency,Key Value,Atomicity,Key Value Store,我读过许多文章,其中指出键值存储只需要两种操作: 设置(键、值) get(key) 这对于单个进程来说很好,但是当您有多个进程时,键值存储如何管理并发性?我原以为需要一个版本号(例如,一个无符号整数)用于比较和交换风格的并发。例如,这两个操作将是: 设置(键、值、版本),其中版本是条件-不匹配会导致并发错误,成功匹配会导致增量 get(key)(返回值和版本) 有两种设计。一些人在使用锁,另一些人在使用 MVCC实现无锁并发。可以总结为: 在一次读取中,数据库返回数据的最新版本 在一次写
设置(键、值)
get(key)
,其中设置(键、值、版本)
是条件-不匹配会导致并发错误,成功匹配会导致增量版本
(返回get(key)
和值
)版本
- 在一次读取中,数据库返回数据的最新版本
- 在一次写入中,数据库会为数据添加一个新版本
- 在读/写并发请求的情况下,读操作将获取数据的最新版本,即当前写操作之前的版本
- 在写/写并发请求的情况下,我认为其中一个写操作会被放弃,稍后会被重放
有两种设计。一些人在使用锁,另一些人在使用 MVCC实现无锁并发。可以总结为: