Cosmos db graph与Azure Sql Server - 性能和成本

Fra*_*ois 7 azure graph-databases gremlin azure-cosmosdb

想象一下社交网络应用程序.用户关注其他用户和用户拍照.照片上有其他用户的标签.

我正在尝试为该应用程序获得有效的Cosmos数据库实现.我提供了SQL Server版本以及基准测试.

这是图表: 在此输入图像描述

这是它的表格版本:

在此输入图像描述

这是Gremlin查询:

g.V('c39f435b-350e-4d08-a7b6-dfcadbe4e9c5')
.out('follows').as('name')
.out('took').order(local).by('postedAt', decr).as('id', 'postedAt')
.select('id', 'name', 'postedAt').by(id).by('name').by('postedAt')
.limit(10)
Run Code Online (Sandbox Code Playgroud)

这是等效的SQL查询(实际上是linq):

Follows
.Where(f => f.FollowerId == "c39f435b-350e-4d08-a7b6-dfcadbe4e9c5")
.Select(f => f.Followees)
.SelectMany(f => f.Photos)
.OrderByDescending(f => f.PostedAt)
.Select(f => new { f.User.Name, f.Id, f.PostedAt})
.Take(10)
Run Code Online (Sandbox Code Playgroud)

该用户跟随136个用户,他们共同拍摄了257张照片.

SQL Server和Cosmos db都位于West Europe Azure位置.我在法国.我在Linpad上做了一些测试.

  • Gremlin查询运行时间超过1.20秒,消耗约330 RU.仅供参考,400RU/s的费用为20美元/月.
  • SQL查询在70毫秒内运行.db是10 DTU(S0的1个实例).因此它的成本为12.65eur /月

如何使用cosmos db更快更便宜地获取Feed?

注意:为了让RU充电,我正在使用Microsoft.Azure.Graph.但我也可以使用Gremlin.Net并得到类似的结果.

Pra*_* R. 1

如果你没有注意到,除了关系模型之外,SQL Server还有图模型,你可以直接在SQL Server中使用图查询。

我还看到您没有使用任何分区键,这意味着图形查询会慢很多。

几个月前,对于一款新产品,我们最初进行了多项测试,就像您所做的那样。当记录数量较多时(大约100K量级,并且图遍历次数超过3次),那么Cosmos比Azure SQL便宜。