MongoDB의 한계(?)

2.4.9버전 기준.


BSON documents

- 하나의 BSON document의 최대 사이즈는 16 MB

- 하나의 BSON object의 최대 depth는 100



namespaces

- db명.colleciton명으로 구성되는 namespace 하나의 길이는 123 bytes가 한계

- 전체 namespace 수는 기본설정인 nssize=16MB 기준으로 24,000개 정도. 

- nssize 옵션은 설정을 통해 최대 2047MB까지 늘일 수 있음.


indexes

- indexing되는 값은 최대 1024 bytes. 1024 bytes가 넘는 값이 indexing요청이 들어오면 MongoDB는 쌩깐다.

- 하나의 collection에는 최대 64개까지 index를 만들 수 있음.

- index 명칭은 namespace를 포함하여 125 characters를 넘을 수 없음. 너무 길다 싶으면 ensureIndex()를 통해 짧게 지정 가능.

- 복합인덱스(CompoundIndex)로 구성할 수 있는 최대 field수는 31개.

- text index는 geospatial index와 섞어서 사용할 수 없음.


Data

- capped collection의 최대 document 수를 지정할 경우, 232 넘어설 수 없음. 최대 document수를 지정하지 않는다면 해당 capped collection은 document 수의 제한은 없음.

- 하나의 mongod 인스턴스는 해당 OS가 제공하는 최대 virtual memory 주소공간 이상의 데이터셋을 관리할 수 없음. (Linux의 경우 저널사용시 64테라, 저널미사용시 128테라이고 Windows는 저널사용시 4테라, 저널미사용시 8테라)

- 한 Database의 collection수는 namespace size 설정에 달려 있음. 상단의 name spaces 부분 참조.


Replica Sets

- 하나의 Replica Set을 구성하는 최대 member수는 12

- 투표권이 있는 Replica Set memeber의 최대수는 7


Sharding Operational Restrictions

(shard 환경에서 사용할 수 없는 명령들)

- group -> 대신 mapReduce나 aggregate를 이용.

- db.eval()도 못씀.

- $where, $isolated, $snapshot, geoSearch 


- 이미 데이터가 들어있는 collection을 sharding 하려 할 경우 256GB 까지 가능. 400GB까지도 가능하지만 document size나 chunk size에 따라 안될 수도 있음.


- shard 환경에서 update/remove시 query에 반드시 shard key 또는 _id가 포함되어 있어야 함. 만약 없을 경우 error 리턴.


- sharding 환경에서 MongoDB는 전체 shards 기준 index의 unique를 보장하지 않음. 만약 해당 index가 prefix로 전체 shard key를 포함한다면 unique 보장. (물론 single field가 아닌 full key)


- shard key는 512 bytes 를 넘을 수 없음.


- sharding을 하고 나면 shard key는 변경불가.

- 만약 무슨일이 있어도 shard key를 변경해야겠다면 아래의 방법을 추천.

    - 전체 데이터를 external dump -> 기존 collection drop -> 새 shard key 설정 -> pre-splitting -> dump 데이터 밀어넣기


- shard key field는 update 불가능.


- 정방향이든 역방향이든 단순증가 shard key는 heavy-insert시에 단일 shard의 단일 chunk에만 insert 되므로 병목이 될 수 있음. 이걸 해결할려면 shard key를 잘 조합하던가, 아니면 hashed shard key를 이용할 것.


- MongoDB는 index가 아닌 field 기준 sort()를 요청할 경우 32MB 이하의 메모리를 사용할 경우에만 정렬된 결과를 반환함.


- aggregation시 $sort가 RAM의 10% 이상을 점유할 경우 error 처리


- 2d geospatial query는 $or를 사용할 수 없음.


- geometric query의 공간은 반구형(hemisphere)안에 들어가야 함.


- 다중 $in을 사용하고 해당 field들이 복합인덱스를 구성하는 경우, $in의 조합이 4000000개를 넘으면 MongoDB는 예외를 던지고 관둔다.


- MongoDB의 Database 이름은 대소문자를 구분한다. 대소문자를 구분하지 않는 Windows에서도 마찬가지다.


- Windows에서는 Database 이름으로 다음 문자를 사용할 수 없다 ===>  \/. "*<>:|?


- Unix, Linux에서는 Database 이름으로 다음 문자를 사용할 수 없다 ===> \/. "


- 모든 시스템에서 MongoDB의 Database 이름에 null character를 포함할 수 없다.


- MongoDB의 Database 이름의 최대길이는 64 characters


- collection 이름은 반드시 언더스코어(_)나 letter character(적절한 번역단어를 모르겠음)로 시작해야 하며 다음과 같은 형태를 사용할 수 없다.

    - 달러기호($)는 포함할 수 없다.

    - 빈 문자열 불가

    - null character를 포함할 수 없다.

    - system.이란 단어로 시작할 수 없다. (예약어)


- field 이름에는 점(.)이나 달러기호($) 또는 null character를 포함할 수 없다.





[참조]

http://docs.mongodb.org/manual/reference/limits/













Posted by bloodguy
,