ソーシャル ネットワーク アプリを想像してみてください。ユーザーは他のユーザーをフォローし、ユーザーは写真を撮ります。写真には他のユーザーのタグが付いています。
そのアプリのグラフの効果的な 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
、同様の結果を使用して取得することもできます。