Размер индекса Cosmos DB превышает размер данных - PullRequest
0 голосов
/ 30 мая 2018

У меня есть многораздельная коллекция в базе данных cosmos с настраиваемой политикой индексации (около 30 полей включительно) и согласованным режимом индексации.Когда размер собранных данных достиг высокого уровня, было решено удалить некоторые документы (~ 50 КБ) из коллекции и переместить в другое хранилище.

После удаления размер данных значительно уменьшился, но размер индекса остался прежним и даже начал увеличиваться.кажется очень странным, потому что я ожидаю, что размер индекса уменьшится так же, как размер данных.Разве это не удаляется при удалении данных?Должен ли я сделать что-то дополнительное, чтобы удалить индексы?Можно ли считать, что размер данных меньше размера индекса?

Снимок экрана для метрик коллекции Azure:
enter image description here

Удаление выполнено с помощью js сохраненного процесса

    function bulkDeleteByCondition() {
    var collection = getContext().getCollection();
    var collectionLink = collection.getSelfLink();
    var response = getContext().getResponse();
    var query = "SELECT root._self FROM root";
    var responseBody = {
        deleted: 0,
        continuation: true
    };

    tryQueryAndDelete();

    function tryQueryAndDelete(continuation) {
        var requestOptions = { continuation: continuation };

        var isAccepted = collection.queryDocuments(collectionLink, query, requestOptions, function (err, retrievedDocs, responseOptions) {
            if (err) {
                throw new Error(`Failed on collection.queryDocuments: ${err} for query ${query}`);
            }

            if (retrievedDocs.length > 0) {
                tryDelete(retrievedDocs);
            } else if (responseOptions.continuation) {.
                tryQueryAndDelete(responseOptions.continuation);
            } else {
                responseBody.continuation = false;
                response.setBody(responseBody);
            }
        });

        if (!isAccepted) {
            response.setBody(responseBody);
        }
    }

    function tryDelete(documents) {
        if (documents.length > 0) {
            var isAccepted = collection.deleteDocument(documents[0]._self, {}, function (err, responseOptions) {
                if (err) {
                    throw new Error(`Failed on collection.deleteDocument: ${err} for query ${query}`);
                }

                responseBody.deleted++;
                documents.shift();
                tryDelete(documents);
            });

            if (!isAccepted) {
                response.setBody(responseBody);
            }
        } else {
            tryQueryAndDelete();
        }
    }
    }

1 Ответ

0 голосов
/ 02 октября 2018

Полагаю, к настоящему времени размер уменьшился.Похоже, что после удаления может занять много времени, возможно, из-за фрагментации.У меня есть коллекция с двухдневным TTL, и, несмотря на то, что большая часть структуры документа исключена из индексации, размер индекса обычно близок к документу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...