10

ソーシャル ネットワーク アプリを想像してみてください。ユーザーは他のユーザーをフォローし、ユーザーは写真を撮ります。写真には他のユーザーのタグが付いています。

そのアプリのグラフの効果的な Cosmos db 実装を取得しようとしています。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)

同等の 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)

そのユーザーは、合計 257 枚の写真を撮影した 136 人のユーザーをフォローしています。

SQL Server と Cosmos db はどちらも、西ヨーロッパの Azure の場所にあります。私はフランスにいます。Linpadで少しテストしました。

  • Gremlin クエリは 1.20 秒以上で実行され、約 330 RU を消費します。参考までに、400RU/秒の料金は月額 20 ドルです。
  • SQL クエリは 70 ミリ秒で実行されます。データベースは 10 DTU (S0 の 1 インスタンス) です。したがって、12.65ユーロ/月かかります

cosmos db を使用してフィードをより速く、より安く取得するにはどうすればよいですか?

注: RU を請求するために、私は を使用してMicrosoft.Azure.Graphいます。しかしGremlin.Net、同様の結果を使用して取得することもできます。

4

2 に答える 2