RavenDb 中补丁的交易
Transactions for patches in RavenDb
RavenDb 不支持补丁的交易。但是在几乎任何高负载项目中,补丁是唯一的方法(由于并发问题)。您不可避免地会遇到需要执行一系列补丁的情况:
AddLikeToCommentLikes(...);
AddLikeToUserLikes(...) //需要向用户显示他喜欢的评论
根据我的经验,通常会有一个主要更改和一个次要更改(如果丢失可以恢复)。但有时会有几个同样重要的变化。
那么,在这种情况下,实现 none 个补丁或所有补丁的最佳做法是什么?有什么方法可以模拟多个补丁的交易吗?
在这方面我唯一的想法是将更改合并到一个脚本补丁中。所以我们有一个添加评论的脚本,然后在同一个脚本中我们使用 LoadDocument 获取 UserLikes 文档并修改它。但我怀疑 RavenDb 是否保证在此操作中未修改 UserLikes。
RavenDB 确实支持补丁事务,只要你通过 id 打补丁。
如果您通过查询进行修补,则该操作将作为每个单独文档的事务处理,而不是全局处理。
在补丁中调用 LoadDocument 将导致所有 个由共享同一事务的补丁修改的文档,因此要么保存所有补丁更改,要么在原子时尚
RavenDb 不支持补丁的交易。但是在几乎任何高负载项目中,补丁是唯一的方法(由于并发问题)。您不可避免地会遇到需要执行一系列补丁的情况:
AddLikeToCommentLikes(...); AddLikeToUserLikes(...) //需要向用户显示他喜欢的评论
根据我的经验,通常会有一个主要更改和一个次要更改(如果丢失可以恢复)。但有时会有几个同样重要的变化。
那么,在这种情况下,实现 none 个补丁或所有补丁的最佳做法是什么?有什么方法可以模拟多个补丁的交易吗?
在这方面我唯一的想法是将更改合并到一个脚本补丁中。所以我们有一个添加评论的脚本,然后在同一个脚本中我们使用 LoadDocument 获取 UserLikes 文档并修改它。但我怀疑 RavenDb 是否保证在此操作中未修改 UserLikes。
RavenDB 确实支持补丁事务,只要你通过 id 打补丁。 如果您通过查询进行修补,则该操作将作为每个单独文档的事务处理,而不是全局处理。
在补丁中调用 LoadDocument 将导致所有 个由共享同一事务的补丁修改的文档,因此要么保存所有补丁更改,要么在原子时尚