MongoDB_id 값은(데이터를 넣을 때 MongoDB가 넣어주는 값의 상위 문자는 만들어질 때의 unixtime16진수 표현이다.

그래서 _id 값의 상위 문자를 추출해서 datetime으로 변환하면 시간을 알 수 있다.

 

string mongo_id = "57b3ce6269d7d0098ef3b603";

 

string hexString = mongo_id.Substring(0, 8);

int num = Int32.Parse(hexString, System.Globalization.NumberStyles.HexNumber);

 

Console.WriteLine(num);

Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(num).ToLocalTime());




저작자 표시
신고
by 흥배 2016.11.30 08:00

RDBMS의 SP처럼 MongoDB에는 Java Script로 저장 함수를 만들어서 사용 할 수 있다.

각 데이터베이스의 Function에 만들고, eval() 함수로 호출해서 사용한다.


db.system.js.save(

                   { _id: "echoFunction",

                     value : function(x) { return x; }

                   }

                 )


db.eval( "echoFunction( 'test' )" )



- 2.4 버전까지는 성능 상의 문제로 추천하지 않는다.

http://docs.mongodb.org/manual/tutorial/store-javascript-function-on-server/

http://stackoverflow.com/questions/15660161/why-is-it-not-recommended-to-use-server-side-stored-functions-in-mongodb


- 이유는 eval를 사용하면 자바스크립트 코드로 동작하고, 이 SP가 호출 후 끝날 때까지 lock이 걸려서 다른 작업을 할 수 없게 된다.

- 지금은 비추하는 기능이지만 근래 MongoDB의 자바스크립트 라이브러리가 V8 엔진으로 바뀌어서 장래에는 쓸만하지 않을까 예상한다.

- 게임 서비스 도중에는 사용하기 부담스럽겠지만 서비스 이외에 관리 측면에서는 자주 사용하는 기능을 Function으로 만들어 놓고 사용하면 편리 할 것 같다.

- 당연하지만 SP에서 컬렉션 조작도 할 수 있다.


db.eval( function(name, incAmount) {

    var doc = db.myCollection.findOne( { name : name } );

    doc = doc || { name : name , num : 0 , total : 0 , avg : 0 };


    doc.num++;


    doc.total += incAmount;


    doc.avg = doc.total / doc.num;


    db.myCollection.save( doc );


    return doc;

 },


 "eliot", 5 );





Mongo Shell 에서 사용하기


같은 database에 있는 function을 호출 할 수 있다.



MongoDB의 쿼리 명령어도 사용 할 수 있다.





저작자 표시
신고
by 흥배 2016.11.14 08:00

MongoDB as a Service 이용하기

자체적으로 MongoDB 클러스터를 운용하지 않아도 될 가능성이 높다.

https://www.compose.io/mongodb/ 등의 관리 서비스 이용을 검토하자.

 


MongoDB Cloud Manager

https://www.mongodb.com/cloud/cloud-manager

간편하게 감시하려면 MongoDB, Inc.

공식 Cloud Manager( MMS)을 이용하면 좋다.

 

 

NewRelic MongoDB plugin

NewRelic 기반을 준비하고 있다면 https://newrelic.com/mongodb 을 쓰는 것이 좋다.

 

 

Datadog-MongoDB Integration

Datadog을 사용하고 있다면 https://docs.datadoghq.com/integrations/mongodb/ 도 좋다.

 

 

MongoDB Zabbix monitoring plugin

Zabbix의 감시 시스템을 구축하고 있다면 이 플러그 인을 쓰는 것이 좋다.

최신판의 Zabbix 3.0에는 대응하자 않을 것이다(2016년 여름 기준).

https://github.com/nightw/mikoomi-zabbix-mongodb-monitoring

 

 

MongoDB Munin plugin

Munin의 감시 시스템을 구축하고 있다면 이 플러그 인을 쓰는 것이 좋다.

https://github.com/comerford/mongo-munin

 

 

MongoDB Enterprise&Ops Manager

 

 


출처: http://qiita.com/tnir/items/91a946b8abb61390337c

저작자 표시
신고
by 흥배 2016.10.04 08:00

MongoDB 3.2가 얼마전에 나왔다.
이전에 비해서 (당연하겠지만)성능이 좋아졌고, 여러 편리한 기능이 추가되었다.
MongoDB를 사용하고 있다면 새 버전으로 업그레이드를 추천한다.

그런에 3.2 버전은 이전 버전인 3.0 에 비해서 크게 바뀐 것 중의 하나가 기본 저장 엔진 'wiredTiger'가 되었다.
3.0 에서는 특별한 설정 없이 기본 설정으로 실행하면 mmap v1 엔진을 사용했는데, 3.2 에서는 기본 설정으로 실행하면 'wiredTiger'가 사용된다.

 


저장 엔진 중 in-memory 엔진도 추가 되었는데(이것은 3.0 에서도 실험적인 기능으로 있었다) 현재 베타 버전이고, 2016년 상반기에 정식으로 릴리즈 될 예정이라고 한다.
개인적으로 in-memory 엔진을 기대 중인데 잘 활용하면 redis를 대체할 수 있을 것 같다.

저작자 표시
신고
by 흥배 2015.12.11 08:59

3.22015년 말에 나올 예정이다.

 

 

도큐먼트 검증

도큐먼트 내용에 검증(키 이름과 값 체크)을 걸 수 있다.

예를 들면

{age: {$gte:0,$lte:150}}

age 0~15사이의 값인지 체크.

 

 

부분적 인덱스

문서 속의 한 값에 따라 인덱스에 포함시킬지를 나눌 수 있다.

예를 들어 사용자 도큐먼트 속에 활성화, 비 활성화 플래그가 있어서 적극적인 사용자만 검색하는 요건인면 비 활성 플래그의 데이터는 인덱스에 포함시키지 않을 수 있다. 이것에 의해 메모리를 효율적으로 이용할 수 있다.

 

 

스토리지 엔진의 추가

지금까지는 MMAP WiredTiger뿐이었지만 새로 인 메모리스토리지 엔진과 암호화할 수 있는 스토리지가 추가된다.

단 암호화 스토리지는 유상 Enterprise 판에만 있는 것 같다.

 

 

BI 툴과 커넥터

BI 툴과 커넥터가 붙을 것 같다. 예상으로는 Tableau 일듯.

 

 

config 서버가 레플리카 셋에

지금까지는 config 서버는 mongod 3대에서 2 PC에서 경신했지만 앞으로는 비 권장되고 대신에 레플리카 셋에서 config를 구축한다.

 

 

Javascript의 엔진이 또 Spidermonkey

지금은 Javascript 엔진은 V8이지만 Spidermonkey이 된다.

분명히 2.4에서 Spidermonkey에서 V8로 바뀌었는데 다시 돌아온 것이 된다.

 

 

mongodump mongorestore가 압축&스트림 전송 대응

mongodump mongorestore가 압축에 대응한다. 또한 원격의 mongod에 대해서 dump한 데이터를 스트림으로 전송 하고 restore 할 수 있게 된다.

 

 

aggregation framework 개량

aggregation framework에 많은 오퍼레이터가 추가되었다. 너무 많아서 생략.

 

 

전문 검색의 개선

전문 검색이 영어 이외에 대응했다! 하지만 유감스럽게도 일본어는 대응하고 있지 않는다.

추가된 언어는 아라비아어, 페르시아어, 우르두어 중국어이다.

외에도 몇 가지 개선이 있는 것 같다.

 

 

새로운 CRUD API

지금까지 CRUD는 한번의 쿼리로 갱신되는 문서 수가 하나이거나 복수여서 알기 어려웠는데 새로운 API가 추가되었다.

예를 들어 update()의 경우 하나를 경신하는 updateOne()이나 복수를 경신하는 updateMany()를 대용할 수 있다.

외에도 findAndModify()도 알기 어려웠으므 갱신으로 치환과 삭제 3개의 대용 API가 생겼다.

 

 

Ops Manager( MMS)개선

파일 시스템의 백업, 쿼리 프로파일링, 인덱스의 시사, 그리고 레플리카 전체의 인덱스를 롤링 업데이트할 수 있게 되었다.

 

 

 

출처: http://qiita.com/fetaro/items/907f4a8791ffb24df9bb

 

저작자 표시
신고
by 흥배 2015.11.06 08:00

C#을 사용해서 MongoDB 프로그래밍 하는 방법을 간단하게 정리해 보았다.

https://github.com/jacking75/CookBookMongoDB-CSharp


완전 초보자 대상이 아니고 C# 및 nuget 등을 아는 사람을 대상으로 하고 있다. 또 MongoDB에 대해서는 특별히 다루지 않는다.


앞으로 틈틈히 업데이트를 할 예정이다. 그리고 PR도 기다린다^^


코드 테스트는 LinqPad를 사용하는 것을 추천한다.



저작자 표시
신고
by 흥배 2015.10.14 08:00



저작자 표시
신고
by 흥배 2015.06.15 08:00



저작자 표시
신고
by 흥배 2015.05.25 08:00

MongoDB C# 라이브러리 1.x 대 기준으로, 2.0에서는 다를 수 있다.


도큐먼트 내용

    "_id" : "jacking", 

    "VList" : [

        NumberInt(0), 

        NumberInt(1), 

        NumberInt(1), 

        NumberInt(2)

    ]

}



string dbConnectString = "mongodb://localhost";


// VList의 1번 인덱스(두번째 위치)의 값을 3으로 바꾼다.

var update = Update.Set("VList." + 1, new BsonDocumentWrapper(3));


// MongoDB Collection 객체를 생성하는 본인이 만든 메소드

var collection = MyExtensions.GetDBCollectionVer1<BsonDocument>(dbConnectString, "GameDB", "Basic");


collection.Update(Query.EQ("_id", "jacking"), update);

저작자 표시
신고
by 흥배 2015.05.10 08:02




mongod.exe --dbpath="..\data\db" --storageEngine="wiredTiger"


mongod.exe --dbpath="..\data\db" --storageEngine="wiredTiger" --wiredTigerCollectionBlockCompressor="none"




테스트 해보니 C# 라이브러리에서 사용하는데는 문제가 없지만 몽고디비 클라이언트 툴인 'RoboMongo'에서는 아직 3.0의 wiredTiger 엔진을 지원하지 않아서 툴이 제대로 동작하지 않는다. 

아마 RoboMongo 9.0버전이 나와야(현재 8.4) 해결 될 듯 하다.

저작자 표시
신고
by 흥배 2015.03.16 08:00
| 1 2 3 |

티스토리 툴바