gpt4 book ai didi

.net - 在数据库中存储增量而不是整个对象

转载 作者:搜寻专家 更新时间:2023-10-30 22:34:14 25 4
gpt4 key购买 nike

我想在数据库中存储/更新一个包含一长串字段的对象。我打算使用 SQL Server(不是 2016),我没有预定义的数据格式来存储这个对象,这意味着我可以将它存储在 JSON/BSON 中,作为二进制 blob 等。

但是,对于每次更新,我都希望保留更改的部分,而不是将对象作为一个整体存储。对于每个请求,这些项目中只有少数会被更改,类似于事件源,我想重新应用所有这些更改以获得对象的最终版本。我在下面列出了一些限制条件:

  • 除了更新现有字段的值外,该对象将来可能会发生变化。可以添加新字段,甚至可以删除现有字段。我应该能够处理这种情况。当前对象可能与我们上次更新数据库中的项目时的对象完全不同。我看到了Gson看起来很有趣。
  • 当然应该在性能和节省空间之间取得平衡。然而,节省空间比速度更重要。

我阅读了有关 json 补丁和一些针对此类问题的自定义解决方案的信息,但想了解更多有关此主题的信息。然而,我不想重新发明轮子,但是一个易于实现的方法(如果有库/框架支持当然更好)会很好。

最佳答案

我认为您几乎是在描述事件溯源 (ES) 和命令查询责任分离 (CQRS)。所以研究一下:https://msdn.microsoft.com/en-us/library/jj591559.aspx

您的 JSON 对象的更改可以用一点命令语言来描述。它可以像这样简单:

set(property,value) 

并将其存储在数据库中。如果只有一个命令,则完全可以避免存储动词。

您可能希望在您的属性名称中允许键路径或.dot 符号来访问嵌套项

 set('foo.baz.bar',{one:1})

但您可能觉得有必要引入额外的动词来指示事件,例如设置对象的根或删除键。

重播更改以具体化您的实体。阅读性能问题,以便为您的用例提出最佳实现。

关于.net - 在数据库中存储增量而不是整个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39468692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com