-
Notifications
You must be signed in to change notification settings - Fork 191
Home
shanbaoyin edited this page May 24, 2019
·
2 revisions
Welcome to the DCache wiki!
MKVCache支持k-k-row的数据结构,主key+联合key+value字段 构成一条记录。主key只能由一个字段组成,联合key可以是1个或多个字段,value字段可以是1个或多个字段。 主key+联合key 构成唯一索引,即主key+联合key可以唯一确定一条记录。例如下面的数据表,userID为主key,联合key有两个字段:purchaseItem和purchaseTime,value字段有多个:quantity,price和hasPaid。指定主key userId可以查询出多条记录,指定userId,purchaseTime和purchaseTime可以唯一确定一条记录。
userID | purchaseItem | purchaseTime | quantity | price | hasPaid |
---|---|---|---|---|---|
1001 | toy | 20190505105733 | 1 | 100 | Y |
1001 | smartPhone | 20190505105733 | 2 | 200 | N |
1002 | PC | 20190505105734 | 1 | 200 | N |
如果查询的某个key不存在,DCache会在内存中增加一条onlykey记录,该记录只有key没有value,目的是为了标识该key不存在,从而避免频繁查询不存在的key时,大量请求穿透到后端DB。
DCache中每条数据都有版本号,版本号为byte类型,循环递增。版本号可以起到乐观锁的作用,例如用户修改一条数据时,想确保只有自己在修改该数据,可以采用以下步骤:
- step1:查询该数据,查询结果中会包含该数据的版本号;
- step2:构造更新请求参数时,参数中的版本号赋值为step1查询结果中的版本号,然后发起更新请求
- step3:检查更新请求的返回值,如果返回ET_DATA_VER_MISMATCH则说明有其他用户在并发修改该数据。
DCache收到插入/更新/删除请求时,如果请求参数中的数据版本号(ver)不为0,DCache则会在修改数据前校验内存中该数据的版本号是否和参数ver一致。