Разделение Azure Cosmos DB и индексирование данных в SQL API с помощью PATH

Я собираю данные Интернета вещей в Azure cosmos DB. Я знаю, что COSOMOS DB SQL API автоматически индексируется по пути. У меня около 150 датчиков в каждом документе, и большинство запросов sql имеют

DeviceId уже является ключом раздела

Выберите c.sensorVariable From c, где c.DeviceId = 'dev1' И c.time = date1 '

{"DeviceId": 'dev1', "time": 123333, "sensor1": 20, "sensor2": 40}

Я буду получать данные различных датчиков, но все мои запросы зависят от deviceId и времени (которое находится в метке времени Unix)

Можно ли проиндексировать данные по идентификатору устройства и времени и исключить другие ключи, которые также находятся в том же пути /.

И для сбора по умолчанию

"includedPaths": [
    {
        "path": "/*",
        "indexes": [
            {
                "kind": "Range",
                "dataType": "Number",
                "precision": -1
            },
            {
                "kind": "Range",
                "dataType": "String",
                "precision": -1
            },
            {
                "kind": "Spatial",
                "dataType": "Point"
            }
        ]
    }
],

Он идет с этим, я чувствую, что для DataType String не следует ли иметь индексирование типа Hash, а не Range? И что это за Точность: -1

В примерах документов Azure cosmos DB я видел точность как 3 для строки, я не понял, почему?

Если у меня 100 устройств и данные размещаются на каждом втором уровне, какой тип индексации лучше?


person Amjath Khan    schedule 07.11.2018    source источник
comment
Привет, мой ответ тебе помогает?   -  person Jay Gong    schedule 08.11.2018
comment
Частично Джей, но это помогло получить знания   -  person Amjath Khan    schedule 08.11.2018


Ответы (1)


Можно ли проиндексировать данные по идентификатору устройства и времени и исключить другие ключи, которые также находятся в том же пути

да. Вы можете настроить свою политику индекса с помощью IncludedPaths и ExcludedPaths.

Такие как :

var excluded = new DocumentCollection { Id = "excludedPathCollection" };
excluded.IndexingPolicy.IncludedPaths.Add(new IncludedPath { Path = "/*" });
excluded.IndexingPolicy.ExcludedPaths.Add(new ExcludedPath { Path = "/nonIndexedContent/*" });

await client.CreateDocumentCollectionAsync(UriFactory.CreateDatabaseUri("db"), excluded);

Дополнительные сведения см. В здесь.

что это за точность: -1

В примерах документов Azure cosmos DB я видел точность как 3 для строки, я не понял, почему?

На основе Индексируйте типы, виды и точность данных:

Для индекса хеширования это значение варьируется от 1 до 8 как для строк, так и для чисел. Значение по умолчанию - 3. Для индекса диапазона это значение может быть -1 (максимальная точность). Он может варьироваться от 1 до 100 (максимальная точность) для строковых или числовых значений.

Вы можете сосредоточиться на этом заявлении сделать свой выбор.

Если у меня 100 устройств и я размещаю данные на каждом втором уровне, какой тип индексации лучше?

Трудно сказать, какой режим индексации является лучшим выбором. Это следует учитывать с учетом уровня согласованности и ваших требований к производительности чтения и записи. Вы можете обратиться к этому абзац.

person Jay Gong    schedule 07.11.2018
comment
Спасибо за ответ . Я заметил еще одну вещь: {datapoint1: 23, datapoint2: 20, datapoint3: 45}, как будто у меня 150 датчиков {keyDataPoint: 22, Data: {datapoin1, datapoint2 ....}}, если я сохраню данные в указанном выше формате и индексировать данные только до одного уровня, что повысит производительность. - person Amjath Khan; 08.11.2018
comment
@AmjathKhan Спасибо, что поделились. Итак, есть еще вопросы? - person Jay Gong; 09.11.2018
comment
Я протестирую это, как я поделился. Спасибо, вы очень мне помогли. - person Amjath Khan; 09.11.2018
comment
@AmjathKhan Привет, есть ли прогресс? Мой ответ тебе помогает? - person Jay Gong; 20.11.2018