Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure cosmosdb CosmosDB应该像文档数据库或图形数据库那样建模吗?_Azure Cosmosdb - Fatal编程技术网

Azure cosmosdb CosmosDB应该像文档数据库或图形数据库那样建模吗?

Azure cosmosdb CosmosDB应该像文档数据库或图形数据库那样建模吗?,azure-cosmosdb,Azure Cosmosdb,我发现CosmosDb既可以支持图形查询,也可以支持更传统的类似SQL的查询——但是我有点困惑于什么样的底层模式在集合级别是最好的。如果我要在MongoDb、SQL Server或Neo4j中建模,我会有非常不同的模式。此外,我似乎可以使用更传统的类似SQL的语法进行查询,这让我对下面的正确性或有效性感到困惑。有时,使某些内容易于查询并不意味着应该假设它是一个高效的查询 CosmosDb的核心是一个文档数据库,我应该对它进行相应的建模——还是一个非常不同的野兽 示例用例 这里有一个例子——假设我

我发现CosmosDb既可以支持图形查询,也可以支持更传统的类似SQL的查询——但是我有点困惑于什么样的底层模式在集合级别是最好的。如果我要在MongoDb、SQL Server或Neo4j中建模,我会有非常不同的模式。此外,我似乎可以使用更传统的类似SQL的语法进行查询,这让我对下面的正确性或有效性感到困惑。有时,使某些内容易于查询并不意味着应该假设它是一个高效的查询

CosmosDb的核心是一个文档数据库,我应该对它进行相应的建模——还是一个非常不同的野兽

示例用例 这里有一个例子——假设我有:

  • 用户配置文件
  • 多种帖子类型(照片、博客、问题)
  • 用户可以喜欢照片
  • 用户可以对照片、博客和问题发表评论
  • 有了sql数据库,我就有了表:
    • 轮廓
    • 照片
    • 博客
    • 问题
    并使用引用完整性连接表以支持操作:

    • 类照片
    • 博客评论
    • 光电元件
    • 问题意见
    使用图形数据库 我会有同样的核心表格

    • 轮廓
    • 照片
    • 博客
    • 问题
    只需为like和comment创建图形关系类型——依靠代码业务逻辑来强制执行您不能喜欢博客的规则,等等

    使用像MongoDb这样的文档数据库 同样,我可能有相同的核心表

    • 轮廓
    • 照片
    • 博客
    • 问题
    评论将是每个档案下的子集合,这将是一个问题,我们是想在每个档案下,还是在照片下,将类似的内容作为嵌入式集合保留。。而且我们必须增加一个like计数并将其同步到另一个集合(根据使用情况,我们也可能创建一个like集合)。评论将作为一个嵌入的收藏藏在每张照片、博客或问题下,而不是它们自己的顶级收藏

    所以我的问题是:
    我们如何在CosmosDB中为这个模式建模?我们应该像MongoDb这样的传统文档数据库那样对其进行建模,还是拥有对图形查询的访问权限可以让我们获得额外的自由,比如不必对“like”之类的操作的字段进行非规范化?

    Azure Cosmos DB数据库引擎的设计完全不依赖于模式。 容器(可以是图形、文档集合或表)是与模式无关的容器,包含任意用户生成的内容,这些内容在接收时自动编制索引。我建议阅读“Azure DocumentDB的模式不可知索引”,这在Cosmos DB中也是一样,以便更好地理解细节

    我们如何在CosmosDB中为这个模式建模?我们应该像MongoDb这样的传统文档数据库那样对其进行建模,还是访问图形查询可以让我们获得额外的自由,比如不必对“like”之类的操作的字段进行非规范化

    当您开始在Azure Cosmos DB中建模数据时,您需要考虑:1。您的应用程序读重还是写重?2.您的应用程序将如何查询和更新数据?etc。通常,非规范化数据模型可以提供更好的读取性能,规范化可以提供更好的写入性能


    举例说明了如何为NoSQL数据库建模文档数据,并分享了使用嵌入式数据模型规范化数据模型混合数据模型的一些场景,这应该是有帮助的。

    为了使示例更简单,假设是普通的情况,它将被读取为heavy-ala instagram。所以它应该基于NoSQL数据库-类似于mongodb的建模方式?它允许图形查询的后果是什么呢?因为您不希望以与传统的无sql数据库相同的方式对其进行建模。