Azure DocumentDb에서 레코드 수 가져오기
azure 사이트의 documentdb에서 허용하는 SQL 쿼리와 documentdb 탐색기(https://studiodocumentdb.codeplex.com/) 는 지원되지 않습니다.현재까지 제가 찾은 레코드 카운트를 얻는 유일한 방법은 코드(아래 참조)입니다.하지만, 지금은 이것이 충돌하고 있기 때문에 우리의 컬렉션에는 충분한 파일이 있습니다.내 솔루션보다 더 많이 작동하는 컬렉션의 문서 수를 계산할 수 있는 방법이 있습니까?
DocumentClient dc = GetDocumentDbClient();
var databaseCount = dc.CreateDatabaseQuery().ToList();
Database azureDb = dc.CreateDatabaseQuery().Where(d => d.Id == Constants.WEATHER_UPDATES_DB_NAME).ToArray().FirstOrDefault();
var collectionCount = dc.CreateDocumentCollectionQuery(azureDb.SelfLink).ToList();
DocumentCollection update = dc.CreateDocumentCollectionQuery(azureDb.SelfLink).Where(c => c.Id == "WeatherUpdates").ToArray().FirstOrDefault();
var documentCount = dc.CreateDocumentQuery(update.SelfLink, "SELECT * FROM c").ToList();
MessageBox.Show("Databases: " + databaseCount.Count().ToString() + Environment.NewLine
+"Collections: " + collectionCount.Count().ToString() + Environment.NewLine
+ "Documents: " + documentCount.Count().ToString() + Environment.NewLine,
"Totals", MessageBoxButtons.OKCancel);
이것은 2017년에 가능합니다.
SELECT VALUE COUNT(1) FROM c
[ 1234 ]
이 시점에서 실제로 작동합니다.
SELECT COUNT(c.id) FROM c
이것은 당신이 지금 SQL 쿼리를 쓰는 것과 같은 방법으로 가능합니다.
SELECT VALUE COUNT(1) FROM myCollection
참고: COUNT(1)은 대규모 데이터 세트에서는 작동하지 않습니다.
지원되는 쿼리에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
"count" 키워드가 구현될 때까지 서버의 스토어 절차에서 쿼리를 수행해야 합니다.카운트만 원하는 경우 쿼리에 있는 모든 열/속성을 가져오지 않도록 주의하십시오.
좋아요 ID만 선택합니다.
dc.CreateDocumentQuery(update.SelfLink, "SELECT c.id FROM c")
요약하자면, 다음은 JS를 통한 저장 프로시저 카운트(Count Stored Procedure)의 예이며, 계속 지원이 제공됩니다.
DocumentDb를 위한 도구가 하나 더 있습니다. https://github.com/mingaliu/DocumentDBStudio/releases .
2017년 3월 업데이트: 최신 DDB SDK에서 DDB Aggregates 보도 자료를 참조하십시오. 단, GROUP BY 없이 기본 Aggregate를 완전히 지원합니다(현재는).예를 들어 다음과 같은 GIT Repo가 있습니다. https://github.com/arramac/azure-documentdb-dotnet/tree/master/samples/code-samples/Queries
단일 파티션에 20만 개의 엔티티가 있는 분할된 Document db 컬렉션에 대해 테스트를 수행했습니다.Collection은 10K RU/초로 구성됩니다.
클라이언트 측 쿼리:
"SELECT VALUE COUNT(1) FROM c"
경과 시간(ms): 2471밀리초 총 요청 사용 단위: 6143.35
참고: 이것이 가장 빠르고 저렴한 옵션입니다.그러나 클라이언트 측에서 계속을 처리하고 반환된 계속 토큰을 사용하여 다음 쿼리를 실행해야 합니다. 그렇지 않으면 부분적인 결과/카운트를 얻을 수 있습니다.
"SELECT COUNT(c.id) FROM c"
경과시간(ms): 2589 총 RU: 6682.43
참고: 이것은 매우 가깝지만 약간 느리고 더 비쌉니다.
서버 측 / 저장 프로시저:
- 저장 프로시저가 필요한 경우 다음과 같이 제공됩니다. https://github.com/Azure/azure-cosmosdb-js-server/blob/master/samples/stored-procedures/Count.js
하지만 그것은 문제가 있다는 것을 조심하세요.카운트를 계산하기 위해 내부적으로 컬렉션/파티션의 모든 문서를 읽습니다.결과적으로 그것은 훨씬 더 느리고 훨씬 더 비쌉니다!
경과 시간(ms): 8584 밀리초 총 RU: 13419.31
- 성능 향상을 위해 위 링크에 제공된 저장 프로시저를 업데이트했습니다.아래의 전체 업데이트된 Count.js.업데이트된 저장 프로시저는 원본보다 훨씬 빠르고 저렴한 성능을 제공하며 최상의 성능을 발휘하는 클라이언트 측 쿼리(위의 #1)와 동등합니다.
경과 시간(ms): 2534밀리초 총 RU: 6298.36
function count(filterQuery, continuationToken) {
var collection = getContext().getCollection();
var maxResult = 500000;
var result = 0;
var q = 'SELECT \'\' FROM root';
if (!filterQuery) {
filterQuery = q;
}
tryQuery(continuationToken);
function tryQuery(nextContinuationToken) {
var responseOptions = { continuation: nextContinuationToken, pageSize: maxResult };
if (result >= maxResult || !query(responseOptions)) {
setBody(nextContinuationToken);
}
}
function query(responseOptions) {
return (filterQuery && filterQuery.length) ?
collection.queryDocuments(collection.getSelfLink(), filterQuery, responseOptions, onReadDocuments) :
collection.readDocuments(collection.getSelfLink(), responseOptions, onReadDocuments);
}
function onReadDocuments(err, docFeed, responseOptions) {
if (err) {
throw 'Error while reading document: ' + err;
}
result += docFeed.length;
if (responseOptions.continuation) {
tryQuery(responseOptions.continuation);
} else {
setBody(null);
}
}
function setBody(continuationToken) {
var body = { count: result, continuationToken: continuationToken };
getContext().getResponse().setBody(body);
}
}
현재 존재하지 않습니다.저도 비슷한 시나리오가 있었는데, 결국 문서가 추가되거나 삭제될 때마다 업데이트되는 문서 속성에 카운터를 추가했습니다.원자성을 원하는 경우 저장 절차의 일부로 또는 트리거로 이 두 단계를 수행할 수도 있습니다.
내 코드 수 솔루션도 작동 중입니다...일단 내가 방금 id를 Papa Ours가 지적한 것처럼 선택한 후 :) 나의 원래 게시물을 작동시키려면, 이 줄을 바꾸세요:
var documentCount = dc.CreateDocumentQuery(update.SelfLink, "SELECT * FROM c").ToList();
다음 줄로:
var documentCount = dc.CreateDocumentQuery(update.SelfLink, "SELECT id FROM c").ToList()
저장 프로시저에 대한 아이디어는 여전히 documentdb 스튜디오에서 작동할 것이기 때문에 마음에 듭니다(정말 멋진 프로젝트 :)) - https://studiodocumentdb.codeplex.com/
Id = IdValue의 레코드 수를 찾는 방법
SELECT COUNT(1) FROM c where c.Id = <IdValue>
언급URL : https://stackoverflow.com/questions/27745346/get-record-count-in-azure-documentdb
'programing' 카테고리의 다른 글
루비에서 __FILE_은 무엇을 의미합니까? (0) | 2023.06.02 |
---|---|
셸에서 사용하는 파일 아이콘 가져오기 (0) | 2023.06.02 |
Swift에서 "Index"를 "Int" 유형으로 변환하는 방법은 무엇입니까? (0) | 2023.06.02 |
분기의 파일 제거로 인한 병합 충돌을 해결하려면 어떻게 해야 합니까? (0) | 2023.05.28 |
RHEL에 Python 3 설치 (0) | 2023.05.28 |