使用关键字作为字段与值查询关键字标签之间是否存在显着的性能差异?

时间:2017-11-30 23:59:40

标签: azure scalability azure-cosmosdb

我有4个文件:

[
{
    "id": "doc1",
    "keywords": [
        {
            "keyword": "keyword1",
            "weight": 1
        },
        {
            "keyword": "keyword2",
            "weight": 2
        }
    ]
},
{
    "id": "doc2",
    "keywords": [
        {
            "keyword": "keyword1",
            "weight": 2
        },
        {
            "keyword": "keyword3",
            "weight": 4
        }
    ]
},
{
    "id": "doc3",
    "keywords": {
        "keyword1": {
            "weight": 3
        },
        "keyword4": {
            "weight": 5
        }
    }
},
{
    "id": "doc4",
    "keywords": {
        "keyword4": {
            "weight": 1
        },
        "keyword5": {
            "weight": 2
        }
    }
}
]

前两个字段包含"keywords"字段,该字段是包含关键字和权重的字典列表。后两个字段有一个"keywords"字段,它是关键字本身的字典,字典属性包含权重数据。

当我想查找包含特定关键字的文档时,我运行此查询:

SELECT c FROM c
JOIN
k IN c.keywords
where k.keyword="keyword1"

这将返回前两个文档中包含关键字“keyword1”的所有文档。

我可以对后两个文件执行类似的查询(虽然我可能会在重量检查中添加不必要的开销):

select d from d
WHERE d.keywords.keyword1.weight > 0

第二个的RU成本略低,但它只有4个文件。我将把它扩展到大约1000万到2000万个文档。其中一种格式比另一种格式更具可扩展性吗?

1 个答案:

答案 0 :(得分:0)

这两种方法都是可扩展的,但使用嵌套属性的第二种方法在效率/ RU方面总体上会更好。