RavenDb不支持Patches的事务。但是在几乎任何高负载项目中,Patch是唯一的方法(由于并发问题)。当你需要执行一系列补丁时,你不可避免地会遇到这种情况:
AddLikeToCommentLikes(...); AddLikeToUserLikes(...)//需要向用户显示他喜欢的评论
根据我的经验,通常有一个主要的变化和一个次要的(如果丢失可以恢复)。但有时候会有几个同样重要的变化。
那么在这种情况下,最好的做法是使得没有一个补丁发生或全部发生?有没有办法模拟几个补丁的交易?
我在这方面唯一的想法是将更改合并到一个脚本补丁中。所以我们有一个添加注释的脚本,然后在同一个脚本中我们使用LoadDocument获取UserLikes文档并对其进行修改。但我怀疑RavenDb保证在此操作中不修改UserLikes。
答案 0 :(得分:1)
RavenDB确实支持修补程序的事务,只要您通过id修补即可。 如果您通过查询进行修补,则操作将作为每个单独文档的事务处理,但不会全局处理。
在补丁中调用LoadDocument将导致所有文档被共享同一事务的补丁修改,因此要么保存所有补丁更改,要么以原子方式进行修改