database/mongodb

[mongodb] 강좌2 BigData MongoDB(NoSQL)

labj 2014. 3. 3. 00:51
[mongodb] 강좌2 BigData MongoDB(NoSQL)


- 다큐먼트는 네트웍의 최소단위다.

- 문서를 분산해 둘 수 있다.

 

> kkk3.kkks[1].a;

1

> kkk3.kkks[1].b;

2

 

- 저장소를 가지고 싶다.

> db.helele.save(kkk3.kkks[0]);

> db.helele.save(kkk3.kkks[1]);

> db.helele.save(kkk3.kkks[2]);

- 저장소를 가졌다.

 

- find는 보고자 하는 대상을 요청한다. 맵리듀싱을 한다.

> db.helele.find({});

{ "_id" : ObjectId("52d55ced2304745723e3f40f"), "a" : 1, "b" : 2, "c" : 3 }

{ "_id" : ObjectId("52d55cf22304745723e3f410"), "a" : 1, "b" : 2, "c" : 3 }

{ "_id" : ObjectId("52d55cf62304745723e3f411"), "a" : 1, "b" : 2, "c" : 3 }

 

- db.heleles.find({}); 가로안({})을 시퀀스 객체라고 한다.

- db.heleles.find({},{});

- db.heleles.find({},{},{});

- 확장메소드 형태로 간다.

 

- a 1 data를 찾아라

> db.helele.find({a:1},{},{});

{ "_id" : ObjectId("52d55ced2304745723e3f40f"), "a" : 1, "b" : 2, "c" : 3 }

{ "_id" : ObjectId("52d55cf22304745723e3f410"), "a" : 1, "b" : 2, "c" : 3 }

{ "_id" : ObjectId("52d55cf62304745723e3f411"), "a" : 1, "b" : 2, "c" : 3 }

 

- a 1이도 b 2 data를 찾아라

> db.helele.find({a:1,b:2},{},{});

{ "_id" : ObjectId("52d55ced2304745723e3f40f"), "a" : 1, "b" : 2, "c" : 3 }

{ "_id" : ObjectId("52d55cf22304745723e3f410"), "a" : 1, "b" : 2, "c" : 3 }

{ "_id" : ObjectId("52d55cf62304745723e3f411"), "a" : 1, "b" : 2, "c" : 3 }

 

-

> db.helele.find({a:1,b:2},{a:1,b:1},{});

{ "_id" : ObjectId("52d55ced2304745723e3f40f"), "a" : 1, "b" : 2 }

{ "_id" : ObjectId("52d55cf22304745723e3f410"), "a" : 1, "b" : 2 }

{ "_id" : ObjectId("52d55cf62304745723e3f411"), "a" : 1, "b" : 2 }

 

-

> db.helele.find({a:1,b:2},{a:1,_id:0},{});

{ "a" : 1 }

{ "a" : 1 }

{ "a" : 1 }

 

-

> db.helele.find({a:1,b:2},{a:1,_id:0},true,false);

{ "a" : 1 }

{ "a" : 1 }

{ "a" : 1 }

 

- 확장해서 메소드를 사용한다.

> db.helele.findOne({a:1,b:2},{a:1,_id:0},true,false);

{ "a" : 1 }

> db.helele.find({a:1,b:2},{a:1,_id:0},true,false).count();

3

> db.helele.find({a:1,b:2},{a:1,_id:0},true,false).skip(1);

{ "a" : 1 }

{ "a" : 1 }

> db.helele.find({a:1,b:2},{a:1,_id:0},true,false).skip(1).limit(2);

{ "a" : 1 }

{ "a" : 1 }

> db.helele.find({a:1,b:2},{a:1,_id:0},true,false).skip(1).limit(1);

{ "a" : 1 }

> db.helele.find({a:1,b:2},{a:1,_id:0},true,false).skip(1).limit(1).count();

3

 

- db 로 시작하면 데이타스토리지 영역의 data를 조회하는 것이다.

> db.helele.find().count();

3

> db.helele.count();

3

> db.helele.find()[2];

{ "_id" : ObjectId("52d55cf62304745723e3f411"), "a" : 1, "b" : 2, "c" : 3 }

> db.helele.find()[2]._id

ObjectId("52d55cf62304745723e3f411")

 

- 포인터를 확인한다.

> db

test

> show dbs

local   0.078125GB

test    0.203125GB

 

- 폴더>데이타베이스>컬렉션>다큐먼트

- use를 사용한다.

> use test;

switched to db test

> db

test

 

- 컬렉션을 조회한다.

> db

test

> db.helele.save({aaa:1});

> show collections

helele

system.indexes

> db.helele2.save({aaa:1});

> db.helele2.save({aaa:2});

> db.helele2.save({aaa:3});

> db.helele2.find();

{ "_id" : ObjectId("52d562802304745723e3f413"), "aaa" : 1 }

{ "_id" : ObjectId("52d562842304745723e3f414"), "aaa" : 2 }

{ "_id" : ObjectId("52d562882304745723e3f415"), "aaa" : 3 }

> show collections;

helele

helele2

system.indexes

 

- persons 데이타베이스를 사용한다.

> use persons;

switched to db persons

> db

persons

> db.helele.save({aaa:11});

> db.helele.save({aaa:12});

> db.helele.find();

{ "_id" : ObjectId("52d563082304745723e3f416"), "aaa" : 11 }

{ "_id" : ObjectId("52d5630e2304745723e3f417"), "aaa" : 12 }

 

 

- db를 조회한다.

> show dbs;

local   0.078125GB

persons 0.203125GB

test    0.203125GB

 

- db가 셀렉터다.

- 몽고디비는 클라우드 스토리지이다.

- http 접근 가능한 모든 곳에 저장된다.

- 오토 샤딩된다.

 

> use persons

switched to db persons

> db

persons

> show collections

helele

system.indexes

> db.helele.find({});

{ "_id" : ObjectId("52d563082304745723e3f416"), "aaa" : 11 }

{ "_id" : ObjectId("52d5630e2304745723e3f417"), "aaa" : 12 }

> db.helele.find({},{aaa:11,_id:0});

{ "aaa" : 11 }

{ "aaa" : 12 }

> db.helele.find({},{aaa:11,_id:0})[1];

{ "aaa" : 12 }

> db.helele.find({},{aaa:11,_id:0})[1].aaa

12

> db.helele.find({},{aaa:11,_id:0})[1].aaa=22;

22

> db.helele.find({},{aaa:11,_id:0})[1].aaa;

12

> db.helele.find({},{aaa:11,_id:0});

{ "aaa" : 11 }

{ "aaa" : 12 }

 

- 배열스타일로 가져온다.

> db['helele'].find({},{aaa:11,_id:0})[1];

{ "aaa" : 12 }

 

 

- 인메모리 디비로 가져온다. 이걸 커조라고 한다.

> db['helele'].find().toArray();

[

        {

                "_id" : ObjectId("52d563082304745723e3f416"),

                "aaa" : 11

        },

        {

                "_id" : ObjectId("52d5630e2304745723e3f417"),

                "aaa" : 12

        }

]

> db['helele'].find().forEach(printjson);

{ "_id" : ObjectId("52d563082304745723e3f416"), "aaa" : 11 }

{ "_id" : ObjectId("52d5630e2304745723e3f417"), "aaa" : 12 }

> db['helele'].find().pretty();

{ "_id" : ObjectId("52d563082304745723e3f416"), "aaa" : 11 }

{ "_id" : ObjectId("52d5630e2304745723e3f417"), "aaa" : 12 }

 

- distinct

- 그룹

- 키를 가지고 그룹 작업을 한다.

- 에그리케이션 강의

 

 

- distinct

> db.helele.find();

{ "_id" : ObjectId("52d563082304745723e3f416"), "aaa" : 11 }

{ "_id" : ObjectId("52d5630e2304745723e3f417"), "aaa" : 12 }

> db.helele.save({bbb:1});

> db.helele.save({bbb:2});

> db.helele.save({ccc:1});

> db.helele.save({ccc:2});

> db.helele.find();

{ "_id" : ObjectId("52d563082304745723e3f416"), "aaa" : 11 }

{ "_id" : ObjectId("52d5630e2304745723e3f417"), "aaa" : 12 }

{ "_id" : ObjectId("52d6af6b693497d1e7f069e0"), "bbb" : 1 }

{ "_id" : ObjectId("52d6af77693497d1e7f069e1"), "bbb" : 2 }

{ "_id" : ObjectId("52d6af80693497d1e7f069e2"), "ccc" : 1 }

{ "_id" : ObjectId("52d6af84693497d1e7f069e3"), "ccc" : 2 }

> db.helele.distinct('bbb');

[ 1, 2 ]

 

- remove

> db.helele.stats();

{

        "ns" : "persons.helele",

        "count" : 6,

        "size" : 216,

        "avgObjSize" : 36,

        "storageSize" : 4096,

        "numExtents" : 1,

        "nindexes" : 1,

        "lastExtentSize" : 4096,

        "paddingFactor" : 1,

        "systemFlags" : 1,

        "userFlags" : 0,

        "totalIndexSize" : 8176,

        "indexSizes" : {

                "_id_" : 8176

        },

        "ok" : 1

}

> db.helele.remove();

> db.helele.stats();

{

        "ns" : "persons.helele",

        "count" : 0,

        "size" : 0,

        "storageSize" : 4096,

        "numExtents" : 1,

        "nindexes" : 1,

        "lastExtentSize" : 4096,

        "paddingFactor" : 1,

        "systemFlags" : 1,

        "userFlags" : 0,

        "totalIndexSize" : 8176,

        "indexSizes" : {

                "_id_" : 8176

        },

        "ok" : 1

}

 

- drop

> show collections

helele

system.indexes

> db.helele.find();

> db.helele.drop();

true

> show collections;

system.indexes

 

- 인덱싱에서 data 가져오기

>  db.helele.save({aaa:1});

>  db.helele.save({aaa:2});

>  db.helele.save({bbb:1});

>  db.helele.save({bbb:2});

>  db.helele.save({ccc:1});

>  db.helele.save({ccc:2});

> db.helele.find();

{ "_id" : ObjectId("52d6b143693497d1e7f069e5"), "aaa" : 1 }

{ "_id" : ObjectId("52d6b143693497d1e7f069e6"), "aaa" : 2 }

{ "_id" : ObjectId("52d6b143693497d1e7f069e7"), "bbb" : 1 }

{ "_id" : ObjectId("52d6b143693497d1e7f069e8"), "bbb" : 2 }

{ "_id" : ObjectId("52d6b143693497d1e7f069e9"), "ccc" : 1 }

{ "_id" : ObjectId("52d6b145693497d1e7f069ea"), "ccc" : 2 }

> db.helele.ensureIndex({aaa:2});

> db.helele.find({aaa:2});

{ "_id" : ObjectId("52d6b143693497d1e7f069e6"), "aaa" : 2 }

> db.helele.remove({aaa:2});

> show collections;

helele

system.indexes

 

일반 프로시저와 자바스크립트의 프로시저

일반 프로시저는 스텍서비스다.

자바스크립트 프로시저는 콜백서비스를 쓴다.

{ } (브레이스속에 브레이스는) c#의 재귀서비스다.

> db

test

> var aaa={age:1,name:'aaaa',sex:true};

> aaa

{ "age" : 1, "name" : "aaaa", "sex" : true }

> var ccc={

... age:function(person) {

...     return person.age;

... },

... name:function(person) {

...     return person.name;

... },

... sex:function(person) {

...     return person.sex;

... }

... };

> ccc

{

        "age" : function (person) {

    return person.age;

},

        "name" : function (person) {

    return person.name;

},

        "sex" : function (person) {

    return person.sex;

}

}

 

함수포인터 콜백이다.

> ccc.age

function (person) {

    return person.age;

}

 

리듀싱 코딩이다.

> ccc.age(aaa);

1

 

- 포인터는 브레이스( { ) 간의 집합이다.

- 프로세스는 리소스 얼로케이션의 단위다.

- use는 스트림포인트라고 본다.

- 컬렉션을 표현 할 때 확장자 s 를 꼭 붙어야 한다.

- db.persons 가 컬렉션이다.

- save는 자바스크립트 오브젝트를 시퀀스에 집어넣는 것이다.

 

> show dbs;

local   0.078125GB

persons 0.203125GB

test    0.203125GB

> use persons;

switched to db persons

> show collections;

helele

system.indexes

> use personDB

switched to db personDB

> db

personDB

> aaa

{

        "age" : 1,

        "name" : "aaaa",

        "sex" : true,

        "_id" : ObjectId("52dd3d1f0e922248291cc5e9")

}

> db.persons.save(aaa);

 

- aaa save하자 personDB.0 / personDB.1 파일이 생겼다.

- aaa를 영구저장장치로 저장한 것이다.

 

 

 

> show collections

persons

system.indexes

 

- ObjectId라는 스페셜이 붙었다. UUID이다.

> db.persons.find();

{ "_id" : ObjectId("52dd3d1f0e922248291cc5e9"), "age" : 1, "name" : "aaaa", "sex

" : true }

 

> var bbb={age:2,name:'bbbb',sex:false};

> db.persons.save(bbb);

 

- 스트림으로 출력한 것과

> db.persons.find();

{ "_id" : ObjectId("52dd3d1f0e922248291cc5e9"), "age" : 1, "name" : "aaaa", "sex

" : true }

{ "_id" : ObjectId("52dd422f0e922248291cc5ea"), "age" : 2, "name" : "bbbb", "sex

" : false }

 

-- 정리된 형태로 불러 온 것이다.

> db.persons.find().toArray();

[

        {

                "_id" : ObjectId("52dd3d1f0e922248291cc5e9"),

                "age" : 1,

                "name" : "aaaa",

                "sex" : true

        },

        {

                "_id" : ObjectId("52dd422f0e922248291cc5ea"),

                "age" : 2,

                "name" : "bbbb",

                "sex" : false

        }

]

 

> db.persons.find().skip(0).limit(1).pretty();

{

        "_id" : ObjectId("52dd3d1f0e922248291cc5e9"),

        "age" : 1,

        "name" : "aaaa",

        "sex" : true

}

> db.persons.find().skip(1).limit(1).pretty();

{

        "_id" : ObjectId("52dd422f0e922248291cc5ea"),

        "age" : 2,

        "name" : "bbbb",

        "sex" : false

}

 

- explain() 오리지날 데이터값을 쓴다 .

> db.persons.find().explain();

{

        "cursor" : "BasicCursor",

        "isMultiKey" : false,

        "n" : 2,

        "nscannedObjects" : 2,

        "nscanned" : 2,

        "nscannedObjectsAllPlans" : 2,

        "nscannedAllPlans" : 2,

        "scanAndOrder" : false,

        "indexOnly" : false,

        "nYields" : 0,

        "nChunkSkips" : 0,

        "millis" : 0,

        "indexBounds" : {

 

        },

        "server" : "actsoft-PC:27017"

}

 

객체는 남아있다.

DB포인트도 남아있다.

collection도 남아있다.

> aaa

{

        "age" : 1,

        "name" : "aaaa",

        "sex" : true,

        "_id" : ObjectId("52dd3d1f0e922248291cc5e9")

}

> bbb

{

        "age" : 2,

        "name" : "bbbb",

        "sex" : false,

        "_id" : ObjectId("52dd422f0e922248291cc5ea")

}

> db

personDB

> show collections;

persons

system.indexes

 

 

- 확장 개념 코딩

> db.persons.find({});

{ "_id" : ObjectId("52dd3d1f0e922248291cc5e9"), "age" : 1, "name" : "aaaa", "sex

" : true }

{ "_id" : ObjectId("52dd422f0e922248291cc5ea"), "age" : 2, "name" : "bbbb", "sex

" : false }

> db.persons.find({},{});

{ "_id" : ObjectId("52dd3d1f0e922248291cc5e9"), "age" : 1, "name" : "aaaa", "sex

" : true }

{ "_id" : ObjectId("52dd422f0e922248291cc5ea"), "age" : 2, "name" : "bbbb", "sex

" : false }

> db.persons.find({},{},{}).skip(1);

{ "_id" : ObjectId("52dd422f0e922248291cc5ea"), "age" : 2, "name" : "bbbb", "sex

" : false }

 

- 스트림 객체 형태로 코딩했다.

> db.persons.find({},{},{}).skip(1).limit(1).pretty();

{

        "_id" : ObjectId("52dd422f0e922248291cc5ea"),

        "age" : 2,

        "name" : "bbbb",

        "sex" : false

}

 

- ({},{})스트림에서 확장객체다. 이게 서비스다.

- {}하나가 펑션널 객체이다.

 

- 객체 정보를 보여준다.

> db.persons.find({},{},{},{}).explain();

{

        "cursor" : "BasicCursor",

        "isMultiKey" : false,

        "n" : 2,

        "nscannedObjects" : 2,

        "nscanned" : 2,

        "nscannedObjectsAllPlans" : 2,

        "nscannedAllPlans" : 2,

        "scanAndOrder" : false,

        "indexOnly" : false,

        "nYields" : 0,

        "nChunkSkips" : 0,

        "millis" : 0,

        "indexBounds" : {

 

        },

        "server" : "actsoft-PC:27017"

}

 

> db.persons.find({age:2},{},{},{});

{ "_id" : ObjectId("52dd422f0e922248291cc5ea"), "age" : 2, "name" : "bbbb", "sex

" : false }

> db.persons.save({age:11});

> db.persons.find();

{ "_id" : ObjectId("52dd3d1f0e922248291cc5e9"), "age" : 1, "name" : "aaaa", "sex

" : true }

{ "_id" : ObjectId("52dd422f0e922248291cc5ea"), "age" : 2, "name" : "bbbb", "sex

" : false }

{ "_id" : ObjectId("52dd44eb0e922248291cc5eb"), "age" : 11 }

 

> db.persons.find({age:11},{},{},{}).forEach(printjson);

{ "_id" : ObjectId("52dd44eb0e922248291cc5eb"), "age" : 11 }

> db.persons.find({age:11},{},{},{});

{ "_id" : ObjectId("52dd44eb0e922248291cc5eb"), "age" : 11 }

 

 

- find를 하는데 발란스트리를 쓰게 된다.

- 오리지날에서 가져오는게 아니고 idex 테이블에서 가져온다.

> db.persons.ensureIndex({age:1},{},{},{});

> db.persons.find({age:1},{},{},{}).explain();

{

        "cursor" : "BtreeCursor age_11",

        "isMultiKey" : false,

        "n" : 1,

        "nscannedObjects" : 1,

        "nscanned" : 1,

        "nscannedObjectsAllPlans" : 1,

        "nscannedAllPlans" : 1,

        "scanAndOrder" : false,

        "indexOnly" : false,

        "nYields" : 0,

        "nChunkSkips" : 0,

        "millis" : 0,

        "indexBounds" : {

                "age" : [

                        [

                                1,

                                1

                        ]

                ]

        },

        "server" : "actsoft-PC:27017"

}

>

 

> db

personDB

> show collections

persons

system.indexes

> db.system.indexes.find();

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "personDB.persons", "name" : "_id_" }

{ "v" : 1, "key" : { "age" : 11 }, "ns" : "personDB.persons", "name" : "age_11"

}

{ "v" : 1, "key" : { "age" : 1 }, "ns" : "personDB.persons", "name" : "age_1" }

> db.system.indexes.find().pretty();

{

        "v" : 1,

        "key" : {

                "_id" : 1

        },

        "ns" : "personDB.persons",

        "name" : "_id_"

}

{

        "v" : 1,

        "key" : {

                "age" : 11

        },

        "ns" : "personDB.persons",

        "name" : "age_11"

}

{

        "v" : 1,

        "key" : {

                "age" : 1

        },

        "ns" : "personDB.persons",

        "name" : "age_1"

}

 

 

[mongodb] 강좌2 BigData MongoDB(NoSQL)