4

Azure Cosmos DB でのクエリ コストを理解しようとしています。

次の例の違いと、fold() を使用するとコストが削減される理由がわかりません。

g.V().hasLabel('item').project('itemId', 'id').by('itemId').by('id')

次の出力が生成されます。

[
  {
    "itemId": 14,
    "id": "186de1fb-eaaf-4cc2-b32b-de8d7be289bb"
  },
  {
    "itemId": 5,
    "id": "361753f5-7d18-4a43-bb1d-cea21c489f2e"
  },
  {
    "itemId": 6,
    "id": "1c0840ee-07eb-4a1e-86f3-abba28998cd1"
  },           
....    
  {
    "itemId": 5088,
    "id": "2ed1871d-c0e1-4b38-b5e0-78087a5a75fc"
  }
]

コストは 15642 RU x 0.00008 $/RU = 1.25$ です。

g.V().hasLabel('item').project('itemId', 'id').by('itemId').by('id').fold()

次の出力が生成されます。

[
  [
    {
      "itemId": 14,
      "id": "186de1fb-eaaf-4cc2-b32b-de8d7be289bb"
    },
    {
      "itemId": 5,
      "id": "361753f5-7d18-4a43-bb1d-cea21c489f2e"
    },
    {
      "itemId": 6,
      "id": "1c0840ee-07eb-4a1e-86f3-abba28998cd1"
    },
...
    {
      "itemId": 5088,
      "id": "2ed1871d-c0e1-4b38-b5e0-78087a5a75fc"
    }
  ]
]

コストは 787 RU x 0.00008$/RU = 0.06$ です。

g.V().hasLabel('item').values('id', 'itemId')

次の出力で:

[
  "186de1fb-eaaf-4cc2-b32b-de8d7be289bb",
  14,
  "361753f5-7d18-4a43-bb1d-cea21c489f2e",
  5,
  "1c0840ee-07eb-4a1e-86f3-abba28998cd1",
  6,
...
  "2ed1871d-c0e1-4b38-b5e0-78087a5a75fc",
  5088
]

コスト: 10639 RU x 0.00008 $/RU = 0.85$

g.V().hasLabel('item').values('id', 'itemId').fold()

次の出力で:

[
  [
    "186de1fb-eaaf-4cc2-b32b-de8d7be289bb",
    14,
    "361753f5-7d18-4a43-bb1d-cea21c489f2e",
    5,
    "1c0840ee-07eb-4a1e-86f3-abba28998cd1",
    6,
...
    "2ed1871d-c0e1-4b38-b5e0-78087a5a75fc",
    5088
  ]
]

コストは 724.27 RU x 0.00008 $/RU = 0.057$ です。

ご覧のとおり、コストへの影響は甚大です。これはちょうど約です。3200 ノードで、プロパティはほとんどありません。

折り畳みを追加すると、なぜそんなに変化するのかを理解したいと思います。

4

1 に答える 1