'mongodb'에 해당되는 글 22건

  1. MongoDB Evening Day in Seoul 2012
  2. Mongo query translator
  3. [펌] mongodb review
  4. MongoDB Gotchas & How To Avoid Them
  5. mongodb new aggregation
  6. MongoDB BSON FORMAT
  7. 제 2회 mongodb tech semina 참석 후기
  8. MongoDB + Hadoop
  9. mongodb assert log debugging 방법
  10. mongodb 다중 배열의 값을 변경하기~ 2

MongoDB Evening Day in Seoul 2012

'Etc' 카테고리의 다른 글

[펌] MongoSV Video; MongoDB Performance Tuning  (0) 2013.01.08
병렬플랜 vs 멀티쓰레드 같은 의미인데~ 흠..  (0) 2012.12.24
Mongo query translator  (0) 2012.12.13
MongoDB, Hadoop and humongous data at MongoSV 2012  (1) 2012.12.10
flags...  (0) 2012.12.07

Mongo query translator

기존 SQL을 mongoDB Query로 변환해주는 툴이 있네요^^

http://www.querymongo.com/

   

[펌] mongodb review

몽고디비를 사용하면서 내용^^ 괜찮다~

http://snmaynard.com/2012/10/17/things-i-wish-i-knew-about-mongodb-a-year-ago/


1. 몽고DB log data 분석 툴
    Kibana - Logstash frontend. Trend analysis for Mongo logs. Pretty useful for good visibility


'Etc' 카테고리의 다른 글

SQL AZURE 경험  (0) 2012.11.26
trace flags...  (0) 2012.11.23
MongoDB Gotchas & How To Avoid Them  (0) 2012.11.12
Deadlock graph event file 저장하기  (0) 2012.11.08
SQL Server Hardware  (1) 2012.11.07

MongoDB Gotchas & How To Avoid Them

몽고DB 관련 좋은 내용이 정리되어 있네요.

http://rsmith.co/2012/11/05/mongodb-gotchas-and-how-to-avoid-them/

   


'Etc' 카테고리의 다른 글

trace flags...  (0) 2012.11.23
[펌] mongodb review  (0) 2012.11.19
Deadlock graph event file 저장하기  (0) 2012.11.08
SQL Server Hardware  (1) 2012.11.07
Ruby & RubyGem설치  (1) 2012.11.06

mongodb new aggregation

'Etc' 카테고리의 다른 글

Ruby & RubyGem설치  (1) 2012.11.06
Redis 활용  (1) 2012.11.06
MongoDB BSON FORMAT  (0) 2012.10.29
(BigData) HDInsight Service  (0) 2012.10.25
spanner 소개  (0) 2012.10.23

MongoDB BSON FORMAT

https://education.10gen.com/courses/10gen/M102/2012_Fall/courseware/week1/Introduction_to_BSON/

http://bsonspec.org/#/specification


몽고DB - BSON FORMAT

   

Total 23 byte

len

Value type

key

value

type

key

Value size

Length of string value

value

End of object

Document size

  

Int32

String

"a"

Number
3

string

"b"

   

4

"xyz"

0

32

8

16 bit

32 bit

8

16

  

  

  

1

1

2

4

1

2

4

6

1




'Etc' 카테고리의 다른 글

Redis 활용  (1) 2012.11.06
mongodb new aggregation  (0) 2012.11.06
(BigData) HDInsight Service  (0) 2012.10.25
spanner 소개  (0) 2012.10.23
MongoDB MMS 설치  (0) 2012.10.16


안녕하세요. 주디아줌마입니다.
(강동운님이 정리해주신 자료에 추가한 부분입니다.)

2012.09.12일 몽고DB 기술세미나를 가졌습니다. 이번 기술 세미나는 10gen의 Mr. Chad Tinel 엔지니어분이 오셔서 QA으로 진행되었습니다. 기술문의는 chadtinel@10gen.com으로 보내주시면 응답해주신다고 합니다. (공짜는 아니에요^^) 



Q. 2.2에서 글로벌락에서 DB락으로 조정이 되었는데, 향후 Release는 어떻게 되는가?

    6개월 주기로 Release되며, 향후에는 일반 DBMS와 같이 Field Locking까지 지원이 될것이다.  3월 정도 2.4 버젼에서는 collection level로 locking으로 기대된다.  추가적으로 보안에 대해서 신경을 쓰게 되었는데 R/W에 대한 권한 조정이 가능하다. 이것은 DB마다 읽기를 가지는 권한과 쓰기를 가지는 로그인 계정이 분리가 된다는 것인데 2.4 버젼에 가능하지 않을까 싶다.



Q. 샤딩은 언제쯤 구현하면 좋은가?

100 GB 정도면 아주 작은 데이터다. 우리는 보통 20 ~ 30TB 정도 되는 데이터를 샤딩하라고 추천하고 있다.그리고 장비 한대에 300 GB RAM을 설치하는건 비용이 엄청 비싸기 떄문에 이것도 3대로 나눠서… 100GB씩 3대로 나눠서 사용하는게 비용적인 측면에서 유리하다.


Q. 도큐먼트 SIZE에 따르는 성능 수치에 대한 정보가 있는가?
없다.  변수가 다양하기 때문에 애매모호하다.

Q. System Log 분리가 가능한가? log level에 따른 남기는 정보가 틀리는데 정보좀 알려달라..
현재까지 시스템 장애 로그에 대한 분리 요청이 없었는데, 본사에 가서 제안을 해보겠다.
log level에 대한 정보 공유할 수 없다. 보통 3, 5로 레벨로 저장한다.

Q. 몽고DB는 Windows Base에 최적화하려는 생각은 있느냐?
아직까지는 없다. 미국내에서도 97%가 리눅스 Base에서 운영중에 있다.
(ㅠㅠ... 아쉽죠.. )

Q. 쓰기 위주의 log성 데이타(예, 도큐먼트 사이즈가 100G) 일때 샤딩을 고려해야 하나?
테라 바이트의 경우에도 문제 없었다. 장애를 대비해야 하기 때문에 standalone 환경 보다는 Replica-Set 환경으로 추천한다.

Q. troubleshooting을 위한 자료가 있느냐?
우리가 개발한 MMS가 있다. 이것을 이용하면 된다. 

Q. 외부 네트웤과 차단된 환경에서는 mms 사용이 불가능하지 않느냐?
  mms를 이용할 수 없는 고립된 장비들 예를들면 은행이나 증권 등등에서는 이것을 사용할 수 없기 때문에 오픈 소스로 모니터링할 수 있는 툴을 개발중이고, 향후 버전에 이걸 따로 배포할 계획이 있다.

Q. 우리는 CPU보다 메모리가 중요하다. 따라서 장비를 scaleup하기 위해서는 
메모리가 첫번째 요소다.
1순위)메모리
2순위) SSD 또는 10GB network badwidth
  RAM이 굉장히 중요하기 때문에.. 현재 사용하고 있는 데이터만큼 메모리 사이즈가 있으면 좋다. 예를들어 100G의 데이터가 있고, 이중 10G가 정도만 메모리에 올라가 있는 상태라면 최소 10G 이상의 램을 가지고 있어야 한다.

CPU의 성능은 많이 차이가 없다. 2개면 충분하다. 

Q. 맴리듀스에서 병렬처리가 가능한지
몽고디비는 맵리듀스가 느리기 때문에 하둡 Plug-in을 제공한다. 몽고DB->하둡, 하둡-> 몽고DB로 넣을 수 있는 plugin을 지원한다. 
http://www.10gen.com/presentations/mongodb-philly/2012/mongodb-hadoop

Q. middle layer에 cash 용도로 Redis를 사용 많이하는데 이제는 제거해도 되나?
제거 해도 된다. 
[발 번역] 잘가~~ Global Lock, MongoDB 2.0 vs 2.2

Q. 백업 어떻게 하는게 최상의 조건인가?
  대부분의 사람들은 db lock을 싫어한다. 왜냐하면 db에 lock을 걸게 되면 write가 안되기 때문이다. 그렇지만 우리는 이런 방법으로 컨설팅을 주도해 나가고 있으며, 복제 셋을 기반으로 db lock을 걸어 데이터를 퍼가던지, 파일을 복사하는 그런 형태로 컨설팅을 안내하고 있다.

Q. 타 RDBMS처럼 POINT BACKUP이 가능한가?
(여기서 POINT BACKUP이란 특정한 시간을 지정해서 백업을 하는 시스템 예를들어 새벽4시)
샤드가 된 서버들은 각각 관리가 되기 때문에 이거는 불가능 하다. 따라서 개별적으로 디비에 LOCK을 걸어 복사하는 형태를 취하는 것이 좋다.

Q. 장비가 3대가 늘어나면 INSERT 속도가 증가하는가?
    현재로 말씀드릴 수 있는건 산술적으로 늘어나는 것이기 때문에 그건 맞다고 볼 수 있다.

Q. 청크가 64 MB라서.. 이게 이동이 되다보면 서비스 라인에 지장을 줄 수 있는데 이걸 따로 보내기 위한 private network를 구성할 계획이 있는가?  
   좋은 질문이다. 하지만 현재로써는 10gen 고려되지 않고 있다. 다만 말씀드릴 수 있는건 10 GB network bandwidth를 쓰라고 조언해드릴 수 있다.

Q. 시간 단위 복구가 가능한가?
   Replica-Set으로 구성해서 SlaveDelay 옵션으로 private와 slave와의 동기화 시간을 조정해서 사용한다. 단, oplog가 커야 한다. oplog를 백업해서 1시간 이전의 데이타로 복구할 수 있다. (주디아줌마: 이건 나중에 한번 테스트 해봐야겠다.)


'Etc' 카테고리의 다른 글

Spanner: Google’s Globally-Distributed Database  (1) 2012.09.17
mongodb index tools...  (4) 2012.09.13
MongoDB + Hadoop  (0) 2012.09.11
sql agent에 할당된 max worker thread 수는 얼마일까?  (0) 2012.09.10
mongodb assert log debugging 방법  (0) 2012.09.07

MongoDB + Hadoop


몽고디비 스터디 다음주제를 하둡과의 만남을 주제로 해볼까? ㅋㅋ



'Etc' 카테고리의 다른 글

mongodb index tools...  (4) 2012.09.13
제 2회 mongodb tech semina 참석 후기  (0) 2012.09.13
sql agent에 할당된 max worker thread 수는 얼마일까?  (0) 2012.09.10
mongodb assert log debugging 방법  (0) 2012.09.07
MongoDB Manual  (2) 2012.09.06

안녕하세요. 주디아줌마입니다.

mongod에 아래와 같이 dumplog가 남았다면? 어느 위치에서 오류가 나는지 학인 할 필요가 있다. (참고, mongodb visual studio 2010 ).  스택 정보가 보인다.  정확한 소스 위치를 알고 싶어할 것이다.


아래와 같이 남기는 방식이 objdump un-mangle names of C++ template 이거던데, 정확히는 모름 ㅠㅠ

 /usr/bin/mongod(_ZN5mongo12sayDbContextEPKc+0x96) [0x57a8a6]

 /usr/bin/mongod(_ZN5mongo8assertedEPKcS1_j+0xfb) [0x5853eb]

 /usr/bin/mongod(_ZNK5mongo5KeyV18dataSizeEv+0x12c) [0x75150c]

 /usr/bin/mongod(_ZN5mongo12BucketBasicsINS_12BtreeData_V1EE16_packReadyForModERKNS_8OrderingERi+0xdd) [0x78fdad]

 /usr/bin/mongod(_ZNK5mongo12BucketBasicsINS_12BtreeData_V1EE11basicInsertENS_7DiskLocERiS3_RKNS_5KeyV1ERKNS_8OrderingE+0x1f6) [0x790286]

 /usr/bin/mongod(_ZNK5mongo11BtreeBucketINS_12BtreeData_V1EE10insertHereENS_7DiskLocEiS3_RKNS_5KeyV1ERKNS_8OrderingES3_S3_RNS_12IndexDetailsE+0x68) [0x792968]

 /usr/bin/mongod(_ZNK5mongo11BtreeBucketINS_12BtreeData_V1EE7_insertENS_7DiskLocES3_RKNS_5KeyV1ERKNS_8OrderingEbS3_S3_RNS_12IndexDetailsE+0x2e5) [0x793f35]

 /usr/bin/mongod(_ZNK5mongo11BtreeBucketINS_12BtreeData_V1EE9bt_insertENS_7DiskLocES3_RKNS_7BSONObjERKNS_8OrderingEbRNS_12IndexDetailsEb+0x10b) [0x79425b]

 /usr/bin/mongod(_ZNK5mongo18IndexInterfaceImplINS_12BtreeData_V1EE9bt_insertENS_7DiskLocES3_RKNS_7BSONObjERKNS_8OrderingEbRNS_12IndexDetailsEb+0xcd) [0x90d03d]

 /usr/bin/mongod() [0x8aedc6]

 /usr/bin/mongod(_ZN5mongo11DataFileMgr6insertEPKcPKvibbPb+0x7f1) [0x8b4781]

 /usr/bin/mongod(_ZN5mongo11DataFileMgr16insertWithObjModEPKcRNS_7BSONObjEb+0x4b) [0x8b5b3b]

 /usr/bin/mongod(_ZN5mongo14checkAndInsertEPKcRNS_7BSONObjE+0xa8) [0x887f88]

 /usr/bin/mongod(_ZN5mongo14receivedInsertERNS_7MessageERNS_5CurOpE+0x439) [0x88c649]

 /usr/bin/mongod(_ZN5mongo16assembleResponseERNS_7MessageERNS_10DbResponseERKNS_11HostAndPortE+0x11c5) [0x88e945]

 /usr/bin/mongod(_ZN5mongo16MyMessageHandler7processERNS_7MessageEPNS_21AbstractMessagingPortEPNS_9LastErrorE+0x78) [0xaa0bc8]

 /usr/bin/mongod(_ZN5mongo3pms9threadRunEPNS_13MessagingPortE+0x287) [0x6389f7]


CentOS의 c++filt를 설치하고 위의 덤프쪽 괄호 안의 문자열들을 copy하여 c++filt를 통하여 위치 정보를 확인해 보자. 괄호안의 문자열들로 텍스트 정보를 정리하고 붙여 넣어서 실행한다.

c++filt 참고
  http://devanix.tistory.com/192 
  http://jh4hj.tistory.com/337 
c++ 컴파일러는 단 하나의 이름을 갖는 심볼이 되도록 name mangling이라는 과정을 수행한다.


[~~]$ c++filt
_ZN5mongo12sayDbContextEPKc+0x96
mongo::sayDbContext(char const*)+0x96
_ZN5mongo8assertedEPKcS1_j+0xfb
mongo::asserted(char const*, char const*, unsigned int)+0xfb
_ZNK5mongo5KeyV18dataSizeEv+0x12c
mongo::KeyV1::dataSize() const+0x12c
_ZN5mongo12BucketBasicsINS_12BtreeData_V1EE16_packReadyForModERKNS_8OrderingERi+0xdd
mongo::BucketBasics::_packReadyForMod(mongo::Ordering const&, int&)+0xdd
_ZNK5mongo12BucketBasicsINS_12BtreeData_V1EE11basicInsertENS_7DiskLocERiS3_RKNS_5KeyV1ERKNS_8OrderingE+0x1f6
mongo::BucketBasics::basicInsert(mongo::DiskLoc, int&, mongo::DiskLoc, mongo::KeyV1 const&, mongo::Ordering const&) const+0x1f6
_ZNK5mongo11BtreeBucketINS_12BtreeData_V1EE10insertHereENS_7DiskLocEiS3_RKNS_5KeyV1ERKNS_8OrderingES3_S3_RNS_12IndexDetailsE+0x68
mongo::BtreeBucket::insertHere(mongo::DiskLoc, int, mongo::DiskLoc, mongo::KeyV1 const&, mongo::Ordering const&, mongo::DiskLoc, mongo::DiskLoc, mongo::IndexDetails&) const+0x68
_ZNK5mongo11BtreeBucketINS_12BtreeData_V1EE7_insertENS_7DiskLocES3_RKNS_5KeyV1ERKNS_8OrderingEbS3_S3_RNS_12IndexDetailsE+0x2e5
mongo::BtreeBucket::_insert(mongo::DiskLoc, mongo::DiskLoc, mongo::KeyV1 const&, mongo::Ordering const&, bool, mongo::DiskLoc, mongo::DiskLoc, mongo::IndexDetails&) const+0x2e5
_ZNK5mongo11BtreeBucketINS_12BtreeData_V1EE9bt_insertENS_7DiskLocES3_RKNS_7BSONObjERKNS_8OrderingEbRNS_12IndexDetailsEb+0x10b
mongo::BtreeBucket::bt_insert(mongo::DiskLoc, mongo::DiskLoc, mongo::BSONObj const&, mongo::Ordering const&, bool, mongo::IndexDetails&, bool) const+0x10b
_ZNK5mongo18IndexInterfaceImplINS_12BtreeData_V1EE9bt_insertENS_7DiskLocES3_RKNS_7BSONObjERKNS_8OrderingEbRNS_12IndexDetailsEb+0xcd
mongo::IndexInterfaceImpl::bt_insert(mongo::DiskLoc, mongo::DiskLoc, mongo::BSONObj const&, mongo::Ordering const&, bool, mongo::IndexDetails&, bool) const+0xcd
_ZN5mongo11DataFileMgr6insertEPKcPKvibbPb+0x7f1
mongo::DataFileMgr::insert(char const*, void const*, int, bool, bool, bool*)+0x7f1
_ZN5mongo11DataFileMgr16insertWithObjModEPKcRNS_7BSONObjEb+0x4b
mongo::DataFileMgr::insertWithObjMod(char const*, mongo::BSONObj&, bool)+0x4b
_ZN5mongo14checkAndInsertEPKcRNS_7BSONObjE+0xa8
mongo::checkAndInsert(char const*, mongo::BSONObj&)+0xa8
_ZN5mongo14receivedInsertERNS_7MessageERNS_5CurOpE+0x439
mongo::receivedInsert(mongo::Message&, mongo::CurOp&)+0x439
_ZN5mongo16assembleResponseERNS_7MessageERNS_10DbResponseERKNS_11HostAndPortE+0x11c5
_ZN5mongo16MyMessageHandler7processERNS_7MessageEPNS_21AbstractMessagingPortEPNS_9LastErrorE+0x78
mongo::assembleResponse(mongo::Message&, mongo::DbResponse&, mongo::HostAndPort const&)+0x11c5
mongo::MyMessageHandler::process(mongo::Message&, mongo::AbstractMessagingPort*, mongo::LastError*)+0x78
_ZN5mongo3pms9threadRunEPNS_13MessagingPortE+0x287
mongo::pms::threadRun(mongo::MessagingPort*)+0x287


25line Key1 datasize를 가져오면서 문제가 있어보이네요.  key 문제이니~ 해결방법은 Reindex하는게 최선책일 듯합니다.


   /** version when write intent already declared */
    template< class V >
    void BucketBasics::_packReadyForMod( const Ordering &order, int &refPos ) {
        assertWritable();

        if ( this->flags & Packed )
            return;

        int tdz = totalDataSize();
        char temp[V::BucketSize];
        int ofs = tdz;
        this->topSize = 0;
        int i = 0;
        for ( int j = 0; j < this->n; j++ ) {
            if( mayDropKey( j, refPos ) ) {
                continue; // key is unused and has no children - drop it
            }
            if( i != j ) {
                if ( refPos == j ) {
                    refPos = i; // i < j so j will never be refPos again
                }
                k( i ) = k( j );
            }
            short ofsold = k(i).keyDataOfs();
            int sz = keyNode(i).key.dataSize();
            ofs -= sz;
            this->topSize += sz;
            memcpy(temp+ofs, dataAt(ofsold), sz);
            k(i).setKeyDataOfsSavingUse( ofs );
            ++i;
        }
        if ( refPos == this->n ) {
            refPos = i;
        }
        this->n = i;
        int dataUsed = tdz - ofs;
        memcpy(this->data + ofs, temp + ofs, dataUsed);

        // assertWritable();
        // TEMP TEST getDur().declareWriteIntent(this, sizeof(*this));

        this->emptySize = tdz - dataUsed - this->n * sizeof(_KeyNode);
        {
            int foo = this->emptySize;
            verify( foo >= 0 );
        }

        setPacked();

        assertValid( order );
    }


'Etc' 카테고리의 다른 글

MongoDB + Hadoop  (0) 2012.09.11
sql agent에 할당된 max worker thread 수는 얼마일까?  (0) 2012.09.10
MongoDB Manual  (2) 2012.09.06
truncate table시 SCH-M lock 이 걸린다.  (0) 2012.09.06
mongodb 다중 배열의 값을 변경하기~  (2) 2012.08.29

안녕하세요. 주디아줌마입니다.

질문사항

주제 : 배열 속성의 정보를 변경하라. 
http://cafe.naver.com/mongodatabase/471


방법

이글을 보시면 아직 지원이 안되는 것 같습니다. Update values in array in MongoDB https://jira.mongodb.org/browse/SERVER-1243

크리스티나가 적용할 수 있는 방법을 알려줬는데요~. 아주 잘 되네요~
참고링크 : http://stackoverflow.com/questions/3017900/update-values-in-array-in-mongodb 
역쉬 크리스티나~ 싸랑해요.ㅋㅋ


-- 테스트용 데이타를 등록 합니다.
db.users.insert(
{
	"id" : '1234',
       	"items" : [ 

		{ "code" : '1' , "typeid" : "1", "positionX" : 3, "positionY" : 4 },
		{ "code" : '2' , "typeid" : "1", "positionX" : 3, "positionY" : 4 },
		{ "code" : '3' , "typeid" : "2", "positionX" : 3, "positionY" : 4 }

	]	
})
db.users.insert(
{
	"id" : '1235',
       	"items" : [ 

		{ "code" : '1' , "typeid" : "1", "positionX" : 3, "positionY" : 4 },
		{ "code" : '2' , "typeid" : "1", "positionX" : 3, "positionY" : 4 },
		{ "code" : '3' , "typeid" : "2", "positionX" : 3, "positionY" : 4 }

	]	
})

db.users.find( { "id":"1234"}).forEach( function( user) 
{
	user.items.forEach( function (item) 
	{
		if( item.code == "1" || item.code == "3" )
		{
			item.positionX = 5000;
		}
	});
	db.users.save(user);

});

db.findOne();
> db.users.findOne();
{
        "_id" : ObjectId("503dd4f54d25432cc83f97b7"),
        "id" : "1234",
        "items" : [
                {
                        "code" : "1",
                        "typeid" : "1",
                        "positionX" : 5000,
                        "positionY" : 4
                },
                {
                        "code" : "2",
                        "typeid" : "1",
                        "positionX" : 2000,
                        "positionY" : 4
                },
                {
                        "code" : "3",
                        "typeid" : "2",
                        "positionX" : 5000,
                        "positionY" : 4
                }
        ]
}


'Etc' 카테고리의 다른 글

MongoDB Manual  (2) 2012.09.06
truncate table시 SCH-M lock 이 걸린다.  (0) 2012.09.06
MongoDB Use Cases  (0) 2012.08.27
Sizing Up the TempDB Database  (0) 2012.08.23
Mongodb configuration option  (0) 2012.08.14