我有一个aggerate数据模型(将具有属于它们的Widgets的Customer实体视为嵌入实体列表)。
当我搜索客户时(例如DocumentDBRepository.GetItemsAsync)这将为客户数据模型以及每个客户端的小部件提供保湿。出于效率原因,我并不需要客户搜索来考虑小部件。
文档dbs中是否有任何策略(例如“LiteCustomer”实体)?我怀疑不是因为这只是我首先告诉它存储的“无模式”数据的本质,但有兴趣听到想法。
这只是一个'非问题'吗?
答案 0 :(得分:2)
首先,免责声明:数据建模很难。有很多细微差别,SO问题永远不能涵盖整个业务,Q和A都没有说明。没有银子弹。无论..
在您的客户端代码中拥有此类模型非常好。您的主要客户模型可能并且将具有许多表示,其中大多数是完整模型的简单子集。与关系型sql类似,仅选择您需要的内容。不要将数据提取到您不需要的客户端。
SQL API提供了非常酷的SQL工具来为你编写返回文档的json。
考虑您的使用方案。如果许多场景碰巧与没有小部件的客户合作(反之亦然),那么会将小部件视为存储模型中的单独文档。
在DocDB中,问题往往不是查询逻辑,而是应用程序对修改逻辑的期望。查询索引的速度很快,每个sql查询都可以轻松进行转换(尽管跨文档连接很麻烦)。对于C(R)UD - 你有更少的选择 - 它总是由完整的文件。文档太大会导致更高的RU成本和复杂的代码。
要考虑的问题:
确实,稍后更改模型在DocDB中很麻烦,但在你知道它被破坏之前不要尝试修复它。如果您不确定是否有问题,那么很可能修复可能问题比修复问题更昂贵。
如果有疑问,请生成大量数据并对其进行测试。