[MONGODB] MongoDB의 쿼리에 $에 전달 된 매개 변수의 최대 수는 무엇입니까?
MONGODBMongoDB의 쿼리에 $에 전달 된 매개 변수의 최대 수는 무엇입니까?
MongoDB의 쿼리에 $에 전달 된 매개 변수의 최대 수는 무엇입니까?
해결법
-
==============================
1.쿼리 자체는 문서입니다. MongoDB를은 (2.4.0+ 버전 등) 16메가바이트에 문서 크기를 제한합니다.
쿼리 자체는 문서입니다. MongoDB를은 (2.4.0+ 버전 등) 16메가바이트에 문서 크기를 제한합니다.
정말, 무엇을 당신이 발견으로하고있는 것은 :
db.collectionName.find(queryDoc)
여기서 'queryDoc는'같은 것입니다 :
{ 'fieldOne' : { $in : [ 1, 2, 3, 4] } }
당신이 쿼리에 $에 전달할 수있는 값의 최대 수를 찾으려면 bsonsize 명령을 사용합니다 :
mongos> Object.bsonsize([1]) 16 mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4] } }) 74 mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5] } }) 85 mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6] } }) 96
그래서, 당신은 모든 추가 정수의 크기는 11 바이트입니다 것을 볼 수 있습니다. 아니 11 비트, 11 BYTES. 이는 방법이고, 적어도 64 비트를 각각 더한 래퍼 BSON 내부 저장 번호. 이 쉽게로 볼 수 있습니다 :
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000] } }) 107 mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000] } }) 107 mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000] } }) 107 mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000] } }) 107 mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000000000000] } }) 107 mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 690000000000000000] } }) 107 mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000000000] } }) 107 mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000000000000000000] } }) 107 mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000000000000000] } }) 107
그래서, 어떤 개인 번호의 크기, 그것은 같은 bsonsize 무슨 상관 없습니다.
큰 그 쿼리 문서입니다 방법 : 질문 자체에?
쿼리에 $의 최대 크기에 mongos 자바 스크립트 프롬프트, 무엇이든, 모든 yeild이 같은 추가 사실을 통해, pymongo에, 절에 $와 1 개 필드 쿼리에 대해 다음을 추가 :
mongos> Object.bsonsize({ 'a' : { '$in' : [1] }}) 34 mongos> Object.bsonsize({ '' : { '$in' : [1] }}) 33 mongos> Object.bsonsize({ '' : { '$in' : [] }}) 22
그래서, 당신을 가정하면, 최대이다 (정말, 최소) 1 바이트 필드 이름이 :
mongos> 16*1024*1024 16777216 mongos> (16*1024*1024) - 22 - 1 16777193 mongos> ((16*1024*1024) - 22 -1) / 11 1525199.3636363635
대답은 : 1525198 (즉 150 만있어 그것은 꽤 큰입니다..)
-
==============================
2.제한이없는 것 같습니다.
제한이없는 것 같습니다.
나는 작은 시험을했다.
1) 컬렉션 A는했다 - 1 백만 간단한 JSON 객체 {ID를 : 이름 :}
나는 다음과 같은 예외를 가지고까지 2)에서 수집 B, I는 수집 A의 참조 ID를로드. 나는 최대의 450K의 참조 카운트를 삽입 할 수 있습니다.
Exception in thread "main" com.mongodb.MongoInternalException: DBObject of size 18388885 is over Max BSON size 16777216
3) 나는 [ID1 ... id450000]에 $ 이러한 ID의 450K 보내고 수집 A. 1 백만 객체에서 450K ID의 전체 목록을 당길 수
와! 이 내 응용 프로그램에 대한 더 많은 더 이상 충분입니다 : D. MongoDB를 정말 멋지다.
-
==============================
3.나는 제한이 단지 BSONDocument의 크기에 의해 결정된다 생각합니다. 쿼리를 정의 할 때, 당신은 당신이 최대 문서 크기를 초과 할 때까지 절까지에 $에 값을 계속 추가 할 수 있습니다. 그래서 당신이 절에서 할 수 있습니다 얼마나 많은 값을 각 값이 얼마나 큰지에 따라 (각 값의 작은 크기, 더는 절에 $에 포함 할 수 있습니다).
나는 제한이 단지 BSONDocument의 크기에 의해 결정된다 생각합니다. 쿼리를 정의 할 때, 당신은 당신이 최대 문서 크기를 초과 할 때까지 절까지에 $에 값을 계속 추가 할 수 있습니다. 그래서 당신이 절에서 할 수 있습니다 얼마나 많은 값을 각 값이 얼마나 큰지에 따라 (각 값의 작은 크기, 더는 절에 $에 포함 할 수 있습니다).
성능의 측면에서, 내가 찾은 것과, 절에 $에있는 값의 개수에 대해 "스위트 스폿 (sweet spot)"이있다. 이 관련 질문에 내 대답을 참조하십시오 : 그것은 요청 당 MongoDB를 여러 번 쿼리 할 OK인가?
즉, 쿼리의 수를 전송 대 절에 $의 값의 수를 균형. 좀 더 구체적으로 블로그 시도하는 것을에 게시 및 다이빙 중순 방법입니다.
from https://stackoverflow.com/questions/5331549/what-is-the-maximum-number-of-parameters-passed-to-in-query-in-mongodb by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB를이 - 코드 종료 : 62 (0) | 2019.12.24 |
---|---|
[MONGODB] 새로운 분야에 배열 프로젝트의 첫 번째 항목 (MongoDB를 집계) (0) | 2019.12.24 |
[MONGODB] WAMP에 MongoDB를 PHP 드라이버 설치 문제 (0) | 2019.12.24 |
[MONGODB] 배열 값의 합 MongoDB를 집계 (0) | 2019.12.24 |
[MONGODB] 여러 필드와 MongoDB를 텍스트 검색 (0) | 2019.12.24 |