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/
'DataBase' 카테고리의 다른 글
[MongoDB] locks (0) | 2014.02.01 |
---|---|
[MongoDB] heavy write(upsert+remove) 상황에서 고가용성을 위한 팁 (heavy write, upsert, remove, availability) (2) | 2014.01.29 |
[MongoDB] remove, update가 빈번한 collection의 storageSize 유지 전략 (reclaim, shrink storageSize) (0) | 2014.01.27 |
[MongoDB] document에 expire time 적용하기 (expire, TTL) (0) | 2013.07.25 |
[MongoDB] 샤딩된 레플리카셋 멤버변경 (sharded replica set reconfig) (0) | 2013.07.24 |