键/值存储如何管理并发?

时间:2017-12-01 05:23:19

标签: concurrency key-value atomicity key-value-store

我已经阅读了许多文章,声明关键值存储只需要两个操作:

  • set(key, value)
  • get(key)

这适用于单个进程,但是当您有多个进程时,键值存储如何管理并发?我原本认为需要用于 compare-and-swap 样式并发的版本号(例如,无符号整数)。例如,这两项行动将是:

  • set(key, value, version),其中version 条件 - 不匹配会导致并发错误,成功匹配会导致增量。
  • get(key)(同时返回valueversion)。

1 个答案:

答案 0 :(得分:0)

有两种设计。有些人正在使用锁,而其他人正在使用MultiVersion Concurrency Control

MVCC实现没有锁的并发性。它可以概括为:

  • 在单次读取中,数据库返回最新版本的数据
  • 在一次写入中,数据库为数据添加新版本
  • 在读/写并发请求的情况下,read获取最新版本的数据,即当前写入之前。
  • 在写入/写入并发请求的情况下,我认为其中一个写入被放弃并稍后重播。