我在cosmos db中有一个分区集合,带有自定义索引策略(大约30个包含字段)和一致的索引模式。当收集数据大小达到高水平时,决定从收集中删除一些文档(~50k)并移动到其他存储。
删除后数据大小显着减少但索引大小保持不变甚至开始增加..这似乎很奇怪,因为我希望索引大小减少与数据大小相同。删除数据后是否删除了它?我应该做些额外的事情来删除索引吗?数据大小是否小于索引大小甚至可以吗?
删除由js stored proc
完成 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();
}
}
}
答案 0 :(得分:0)
我想现在尺寸已经减小了。删除后似乎需要很长时间才能分配空间,这可能是由于碎片造成的。我有一个具有2天TTL的集合,尽管大多数文档结构都被排除在索引编制之外,但索引大小通常与文档几乎相同。