Azure cosmosdb 文档数据建模与查询性能

Azure cosmosdb 文档数据建模与查询性能,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我有一个Aggreate数据模型(假设一个客户实体具有属于它们的小部件,作为一个嵌入式实体列表) 当我搜索客户(例如DocumentDBRepository.GetItemsAsync)时,这些客户将与每个客户的小部件一起水合客户数据模型。出于效率的原因,我并不需要客户搜索来考虑小部件。 dbs文件(如“LiteCustomer”实体)中是否对此有任何策略?我并不怀疑,因为这只是我告诉它首先要存储的“无模式”数据的本质,但我很想听听他们的想法 这仅仅是一个“非问题”吗?首先,免责声明:数据建模很

我有一个Aggreate数据模型(假设一个客户实体具有属于它们的小部件,作为一个嵌入式实体列表)

当我搜索客户(例如DocumentDBRepository.GetItemsAsync)时,这些客户将与每个客户的小部件一起水合客户数据模型。出于效率的原因,我并不需要客户搜索来考虑小部件。 dbs文件(如“LiteCustomer”实体)中是否对此有任何策略?我并不怀疑,因为这只是我告诉它首先要存储的“无模式”数据的本质,但我很想听听他们的想法


这仅仅是一个“非问题”吗?

首先,免责声明:数据建模很难。有很多细微差别,所以一个问题永远不能涵盖整个业务和问答中未提及的一切。没有银弹。不管

“客户” 在客户机代码中使用这样的模型非常好。您的主要客户模型可能会有很多表示,其中大多数是完整模型的简单子集。与关系sql类似,只选择您需要的内容。不要将不需要的数据提取到客户端

提供了非常酷的SQL工具来为返回文档编写json

物理存储模型可能不同于域模型 考虑您的使用场景。如果许多场景恰好适用于没有小部件的客户(反之亦然),则考虑在存储模型中将小部件作为单独的文档

在DocDB中,问题通常不是查询逻辑,而是应用程序对修改逻辑的期望。索引后的查询速度很快,每个sql查询都可以轻松地进行转换(尽管跨文档连接很麻烦)。对于C(R)UD,您的选择较少—它始终由完整文档提供。拥有太大的文档将导致更高的RU成本和复杂的代码

要审议的问题:

  • 在小部件计数/详细信息未更改的情况下,客户更改的频率如何
  • 小部件在不改变客户的情况下多久改变一次
  • 客户上的小部件是独立更改还是始终作为一个集合更改
  • 何时需要客户+小部件更改的事务更新
  • 查询是什么样子的?它们可以被索引吗
测试。 诚然,在DocDB中,稍后更改模型是很麻烦的,但在您知道某个模型已损坏之前,不要尝试修复它。如果你不确定自己是否有问题,那么解决问题的成本很可能比不解决问题的成本更高


如果有疑问,生成大量数据并进行测试。首先,免责声明:数据建模很难。有很多细微差别,所以一个问题永远不能涵盖整个业务和问答中未提及的一切。没有银弹。不管

“客户” 在客户机代码中使用这样的模型非常好。您的主要客户模型可能会有很多表示,其中大多数是完整模型的简单子集。与关系sql类似,只选择您需要的内容。不要将不需要的数据提取到客户端

提供了非常酷的SQL工具来为返回文档编写json

物理存储模型可能不同于域模型 考虑您的使用场景。如果许多场景恰好适用于没有小部件的客户(反之亦然),则考虑在存储模型中将小部件作为单独的文档

在DocDB中,问题通常不是查询逻辑,而是应用程序对修改逻辑的期望。索引后的查询速度很快,每个sql查询都可以轻松地进行转换(尽管跨文档连接很麻烦)。对于C(R)UD,您的选择较少—它始终由完整文档提供。拥有太大的文档将导致更高的RU成本和复杂的代码

要审议的问题:

  • 在小部件计数/详细信息未更改的情况下,客户更改的频率如何
  • 小部件在不改变客户的情况下多久改变一次
  • 客户上的小部件是独立更改还是始终作为一个集合更改
  • 何时需要客户+小部件更改的事务更新
  • 查询是什么样子的?它们可以被索引吗
测试。 诚然,在DocDB中,稍后更改模型是很麻烦的,但在您知道某个模型已损坏之前,不要尝试修复它。如果你不确定自己是否有问题,那么解决问题的成本很可能比不解决问题的成本更高

如果有疑问,生成大量数据并进行测试。