- 타임존이 다를때 ISODate 일자 별 집계 문제점
- 한국은 GMT+9 이므로, "$dayOfMonth" 함수를 통해 집계하면 9시간 당겨 출력
- "$dateToString" 함수와 "$add" 함수를 통해 9시간을 더해 준 뒤에 집계
- 실제 자바 프로그램 상에서 Date 함수를 사용하면 되기 때문에 문제는 없음
- 단, 외부 입력일자가 없는 집계인 경우 Group By Month 는 문제가 됨
- 단순 for ... loop 통한 문서 생성
- 결과 커서를 혹은 데이터베이스, 컬렉션을 for ... each 통해서 탐색할 수 없나?
- ISODate 직접입력 및 GMT 출력방법
- 터미널에서 직접 스크립트 실행하는 방법
var start = new Date();
db.foo.find({dt:{$gte:"20150201", $lt:"20150301"}}, {_id:0, dt:1});
var end = new Date();
print('> Took ' + (end - start) + ' ms');
psyoblade@ mongodb] > bin/mongo localhost/test asdf.js
- 몽고 콘솔에서 직접 스크립트 실행하는 방법
> load("./asdf.js")
- 몽고 콘솔에서 편집기(vi)를 사용하는 방법
- set 은 object 로 표현되는 것 같은데 문서 내의 set 필드에 하나씩 추가할 수 없나?
- $set 함수가 항상 전체를 get & set 하는 방법 밖에 없는 것 같은데 맞나?
- set 안에 set 을 보관하는 경우에도 전체를 set 안하고 일부만 할 수 있나? YES
* updating-nested-document-in-mongodb
collection.update({'_id': myid}, {$set: {'anotherdoc.something': 'somenewval'});
- set vs. array 어떤 경우에 사용하는가?
- set : 조회 시에 정확한 key 값을 알고 조회할 때
- array : 조회 시에 임의의 값을 iterating 하거나 aggregate 할 필요가 있을 때
{ "_id" : 20150101, "install" : 200, "purchase" : 200, "session" : 200 }
{ "_id" : 20150102, "install" : 20, "purchase" : 20, "session" : 20 }
{ "_id" : 20150103, "install" : 400, "purchase" : 400, "session" : 400 }
{ "_id" : 20150104, "install" : 20, "purchase" : 20, "session" : 20 }
{ "_id" : 20150105, "install" : 2, "purchase" : 2, "session" : 2 }
"Tailor your schema to your application workload"
결론은 어플리케이션에 맞게 스키마를 잘 설계 하라
- 문서 단위와 이벤트 단위는 항상 같지 않다
- 메모리 기반 몽고디비의 경우 malloc 대신 memset 이 낫기 때문에 insert 된 문서에 업데이트 하는 것이 효과적이다.
- 문서가 많아 질 수록 _id 또한 늘어나므로 문서 수 자체를 줄이는 것이 유용하며, 약 10억 _id 값이 32GB 메모리를 차지한다
- 하나의 문서에 하나의 이벤트 대신 Set 을 통한 N개의 데이터를 저장하라
- Worst : document = event
- Better : document = 3600 seconds events
- Best : document = { 60 mins * 60 seconds events }
'오픈소스 > mongodb' 카테고리의 다른 글
Mongo-Hadoop Integration (0) | 2015.07.28 |
---|---|
MongoDB Hadoop Connector 사용기 (0) | 2015.07.15 |
문서의 크기가 작으면 집계함수 성능이 올라갈까? (0) | 2015.06.29 |