f******n 发帖数: 208 | 1 假设
key-value store 是在内存里用作cache; database 是读写disk.
比方说现在有一个写操作:
如果先写memory成功了,然后写db的时候挂了。这样两者会不一致。
如果先写db成功了,然后写memory 挂了,这样两者又会不一致。
说白了,就是使用什么机制才能让这两个操作能一致,就是类似transaction那种效果
,要么都发生,要么都不发生。
-----
没答出来。请高人解惑。 |
l***i 发帖数: 1309 | 2 timestamp on value, write to DB first, then memory keep reading from DB
until timestamp matched. |
f******n 发帖数: 208 | 3 但是在memory 读到正确的version以前岂不是还是一个inconsistent的状态吗?
大牛能否展开解释一下啊
【在 l***i 的大作中提到】 : timestamp on value, write to DB first, then memory keep reading from DB : until timestamp matched.
|
s******c 发帖数: 1920 | 4 inmemory store 作为write through cache来使用:
所有的写只有当disk的db里写了log之后才修改mem store然后再返回。 memory store
crash了的话,从db里读数据重建
【在 f******n 的大作中提到】 : 假设 : key-value store 是在内存里用作cache; database 是读写disk. : 比方说现在有一个写操作: : 如果先写memory成功了,然后写db的时候挂了。这样两者会不一致。 : 如果先写db成功了,然后写memory 挂了,这样两者又会不一致。 : 说白了,就是使用什么机制才能让这两个操作能一致,就是类似transaction那种效果 : ,要么都发生,要么都不发生。 : ----- : 没答出来。请高人解惑。
|
i******s 发帖数: 301 | 5 这个难道不是考MVCC ? 给每个写操作,kv都有一个唯一的id,id大小表示操作先后。
读操作的id是当前已完成的最大写操作id,然后读的时候忽略所有id比它大的kv。等到
db真正写完后,更新当前已完成的最大写操作。这样读操作不用加锁,写操作当然要加
。 |
a********e 发帖数: 53 | |
j**********3 发帖数: 3211 | |
f******n 发帖数: 208 | |
s**x 发帖数: 7506 | 9 这个太简单了吧?always invalidate memory cache before any write, and the
write to db, you can update cache after db write or populate cache after
next read.
The key is it is always okay if the value is not available in the cache. Db
is the source of truth.
★ 发自iPhone App: ChineseWeb 8.7
【在 f******n 的大作中提到】 : 假设 : key-value store 是在内存里用作cache; database 是读写disk. : 比方说现在有一个写操作: : 如果先写memory成功了,然后写db的时候挂了。这样两者会不一致。 : 如果先写db成功了,然后写memory 挂了,这样两者又会不一致。 : 说白了,就是使用什么机制才能让这两个操作能一致,就是类似transaction那种效果 : ,要么都发生,要么都不发生。 : ----- : 没答出来。请高人解惑。
|