我想在数据库中存储/更新一个包含很长字段列表的对象。我打算使用SQL Server(而不是2016),我没有预定义的数据格式来存储这个对象,这意味着我可以将它存储在JSON / BSON中,作为二进制blob等。
但是,对于每次更新,我都希望保留更改的部分,而不是将对象作为一个整体存储。对于每个请求,只有少数这些项目会被更改,类似于事件源,我想重新应用所有这些更改,以获得对象的最终版本。我在下面列出了一些限制因素:
我阅读了json补丁和一些针对此类问题的自定义解决方案,但想要了解有关此主题的更多信息。但是,我不想重新发明轮子,但是一个易于实现的方法(如果有一个库/框架支持当然更好)会很好。
答案 0 :(得分:2)
我认为您几乎都在描述事件采购(ES)和命令查询责任隔离(CQRS)。所以要研究它:documentation
可以用一点命令语言来描述对JSON对象的更改。它可以很简单:
KeyNavigation.down: button2
并将其存储在数据库中。如果您只有一个命令,则可以完全避免存储动词。
您可能希望允许属性名称中的密钥路径或.dot表示法访问嵌套项
set(property,value)
但您可能觉得需要引入其他动词来指示设置对象根目录或删除密钥等事件。
重播更改以实现您的实体。阅读性能问题,以便为您的用例提供最佳实现。