-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
乐观更新 #91
Comments
通过 RDB 解决这个问题看上去还是蛮有趣的!我想了想,基于状态做多次操作的依赖检查也许是可行的。 |
这个方式以前的确考虑过,在 |
我的想法上面已经给出了,所有的查询在从 |
噢 原来如此 对 db api 理解还是不到位 |
我只是假想的,也还没有具体调研过可行性.... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
双休日在知乎上和朋友讨论这个问题时想到的一个对乐观更新的思考。
客户端有时会需要这样一种场景的支持:
前端会发起一个数据 C/U/D 的操作,但需求是在远端确认之前将率先修改后的变化响应在客户端界面。
之前考虑这个问题时,就觉得操作更新的rollback似乎很难做,原因有二:
和朋友讨论的时候又有了一个粗糙的想法:
我们可以再真正的存储层前再做一层预写入的抽象。方案可以是这样,考虑到我们所有客户端缓存资源一定存在一个id,如果某一个资源在远端尝试更新而本地需要立刻响应时,就将该次修改行为 map 成一个 patch action 放进这个预写层 (可以是一个 Rx.Subject),这个 patch action 保存了对状态的修改,并且支持将自己转换成一个 Lovefield C/U/D Query。同时在这之后所有对符合 id 资源的 C/U/D 操作 (例如 socket 的推送) 全都 proxy 到预写层,然后把预写层的改动投影到每个查询上,不断重放,直到远端响应了第一个操作的结果,然后把所有累积的操作结果做一次性写入。
伪码大致如下:
当然这个方案还有一些问题需要解决:
但乐观一些的话,预写层里的数据生命周期应该并不会太长,静态场景下预写层的 length 应该为 0。
途做草稿,暂时先记录一下。@suyu34 , @Miloas , @bjmin , @zry656565 , @chuan6
ref:
teambition/teambition-sdk#269
The text was updated successfully, but these errors were encountered: