가급적 collection 에 데이터 입력 전 shard key 설정 하는 것 추천합니다. 입력 후 shard key 생성 시, DB 간 데이터 분배로 DB 부하가 커져, 해당 collection 조회가 느려질 수 있습니다.
가급적 Embedded Document 가 아닌 첫번째 level 의 field 를 shard key 로 설정한다.
_id 에 Embedded Document 가 매핑되는 경우 Embedded Document 내 개별 field 가 아닌 _id 전체로 shard key 를 설정할 수는 있지만, 사용이 까다로워 권장하지 않습니다.
VO entity 의 @Sharded annotation 관련 설정
shard key 를 _id 가 아닌 다른 field 들로 지정하고, MongoTemplate save method 호출 시, document class 에 shardKey property 에 shard key 들을 설정한 @Sharded annotation 을 추가해야 합니다.
만약 collection 에 추가하는 document 에 _id 가 없다면, MongoDB driver 가 값을 생성해서 _id 에 할당. 생성된 값은 12-byte hexadecimal string 인 ObjectId
2개 이상의 column(field) 을 PRIMARY KEY 로 지정 시,
MySQL
복수개의 column 을 대상으로 PRIMARY KEY Constraint 지정
MongoDB
_id field 에 document 로 지정
추가 인덱스 생성 필요
ex) _id 에 {authId, dateYmd} 설정 시, {'_id.authId': 1, '_id.dateYmd': 1} 를 key 로 가진 index 생성 필요. 해당 index 가 없으면 _id.authId 조건으로 조회 시, 전체 collection scan 이 발생합니다.
다른 collection 에서 해당 collection 의 _id 를 참조한다면, 쉬운 참조를 위해 _id 에 embedded document 을 지정하지 않고, MongoDB driver 에 의해 자동 생성된 값을 할당
PK 로 지정해야 하는 field 들은 unique index 설정
참고) id 를 auto increment 값으로 설정하고, 실제 primary key 를 unique index 로 지정 후 insert 또는 update 가능 여부
위 method 에서 기존 데이터와의 duplicate 기준은 _id 가 같은지 여부입니다. _id 가 다르고, unique index 에 같은 값이 설정된 document 로 save 를 하면, insert 를 하고, unique index constraint 에 걸러 에러가 납니다.
위 경우 실제 primary key 를 _id 에 설정하면, MongoTemplate 의 save method 호출 시 insert 또는 update 가 가능합니다.
개괄
MongoDB
MySQL
MongoDB 용어
상세
DDL 여부
sharding
sharding?
Auth
) 일 때, range sharding 선택sharding 으로 인한 제한
updateOne()
,replaceOne()
,deleteOne()
과 같은 단일 document 수정 시 제한deleteOne()
,updateOne()
(upsert 옵션이 false) 는 filter 에 shard key 또는 _id를 포함해야 함updateOne()
(upsert 옵션이 true),replaceOne()
(upsert 옵션이 true) 는 filter 에 shard key 가 포함되어야 함shard key 생성
참고
_id
에 Embedded Document 가 매핑되는 경우 Embedded Document 내 개별 field 가 아닌 _id 전체로 shard key 를 설정할 수는 있지만, 사용이 까다로워 권장하지 않습니다.VO
entity 의@Sharded
annotation 관련 설정shardKey
property 에 shard key 들을 설정한@Sharded
annotation 을 추가해야 합니다.upsert
option 을true
로 설정한replaceOne
을 호출하는데요.upsert
option 을true
일 때,replaceOne
의 filter 에 full shard key 가 있어야 한다고 합니다.@Sharded(shardKey = {"a", "b"})
primary key
개괄
PRIMARY KEY
Constraint 지정id
일 필요는 없음.id
이름을 가진 column 이 없어도 됨_id
field 에 primary key 로 지정할 value 또는 document 지정_id
field 가 모든 document 에 있어야 함_id
가 없다면, MongoDB driver 가 값을 생성해서_id
에 할당. 생성된 값은 12-byte hexadecimal string 인ObjectId
2개 이상의 column(field) 을
PRIMARY KEY
로 지정 시,PRIMARY KEY
Constraint 지정_id
field 에 document 로 지정_id
에{authId, dateYmd}
설정 시,{'_id.authId': 1, '_id.dateYmd': 1}
를 key 로 가진 index 생성 필요. 해당 index 가 없으면_id.authId
조건으로 조회 시, 전체 collection scan 이 발생합니다.참고) id 를 auto increment 값으로 설정하고, 실제 primary key 를 unique index 로 지정 후 insert 또는 update 가능 여부
UNIQUE
index orPRIMARY KEY
duplicate 로 체크save
를 하면, insert 를 하고, unique index constraint 에 걸러 에러가 납니다._id
에 설정하면, MongoTemplate 의 save method 호출 시 insert 또는 update 가 가능합니다.