'package/mongodb'에 해당되는 글 13건

  1. 2011.06.29 Data type and Conventions
  2. 2011.06.29 collection관련
  3. 2011.06.29 mongodb 시작하기

Data type and Conventions

|
1. MongoDB (BSON) Data types
   string, integer, boolean, double, null, array, object, date, object id, binary data, regular expression, code
   string은 utf8로 저장된다 
   data type체크하기
   x.d instanceof Date
   x.b instanceof BinData
   x.n instanceof NumberLong
   type of x.n2 

   data type : 64 bit values, 앞에 32bit는 second since the UTC epoch, 뒤에 32bit는 현재 초에서의 증가하는 숫자 
                   document에서 _id다음에 column으로 와야지만 실제적인 date type으로 저장된다
                   (순서상 첫번째여야함 _id는 무조건 첫 column데이터이므로)

                   new Timestamp()   -> {"t" : 1293765885000, "i" : 1}
 Object IDS : 모든 document는 unique한 key인 object_id를 갖는다
(_id, 첫번째 attribute로 갖음. capped collection은 기본으로는 존재하지 않음)
user가 array를 제외한 어떤 데이터형으로도 _id를 초기화시킬수 있다  12bytes binary value  ObjectId("47cc67093475061e3d95369d") : string으로 부터 ObjectId를 만들어낸다 

  12-byte로 이루어져있고 4byte는 timestamp, 3byte는 machine id, 2byte는 processid, 3byte는 counter
                        object_id로 사용자는 document 생성시간. seq_id를 얻을 수 있다 (timestamp, counter를 통해서) 
                        id는 무조건 indexing 되어있다.
                        _id 의 value를 셋팅할때는 string으로 넣기보다는 BinData로 넣는게 사이즈를 줄일 수 있다.

2. Database Reference : 명시적으로 collection간의 join을 지원하지 않으므로 join과 비슷한 동작을 하기 위해서
   - Simple Manual Reference : client단에서 직접 document별로 join
      p = db.컬렉션명.findOne();
      a = db.컬렉션명.find({_id:p.person});
   - DBRef 
      DBRef는 collectionname과 object_id를 갖는다 
      만약에 reference하는 collection이 변하지 않는다면 manual reference가 좀 더 효율적이다 
      stu = { name : 'joe', classes : [ new DBRef('courses', x._id) ] }
      stu.classes[0].fetch() 
And

collection관련

|
collection관련 명령어
처음 use mall 하면 mall이라는 database로 가는 것이고 이 곳에서 db.product.save() 하는 순간부터
product가 mall이라는 database의 하위 collection이 되는것임 (use mall 이 된 상태이기 때문에 이미 database는 mall인 상태임)
show collections : 현재 name space내의 collection이름
db.컬렉션명.find().sort({name : 1, age : -1}) : name 오름차순 age 내림차순으로 정렬
db.capped컬렉션명.find().sort({$natural : -1}).limit(50) : 최신순 정렬 (기본 cappedCollection은 insert순이다)

1. 일반적인 collection
   rdbms에서의table과 같은의미

2. capped collection
   FIFO기능을 갖고 있는 고성능의 테이블
   기본적인 natural order는 insert order
   용량제한이 있다. collection이 꽉차면 가장 처음에 들어간 데이터 순으로 삭제된다. 
   db.createCollection("컬렉션이름", {capped:true, size:100000})
   사용될 수 있는 application : logging,  caching, auto archiving
   db.runCommand( {createCollection:"컬렉션명", capped : true, size : 100000})
   show collections 현재 namespace상의 collections을 보여준다
 
And

mongodb 시작하기

|
mongodb 설치하기
http://www.mongodb.org/downloads 에서 사용자 platform에 맞는 바이너리 다운로드하기
mongodb 실행하기  
   1. demon으로 실행 : mongod --fork --logpath /var/log/mongodb.log --logappend
   2. 추가 옵션 --dbpath 경로 : 원래는 /data/db 경로로 monggodb의 기본 데이터들이 저장되는데 경로를 변경할수 있다   
   3. 추가 옵션 --port port번호 : 기본포트가 27017포트외에 다른 포트를 사용하기위해서
   mongod --fork --logpath /home/yoga/workspace/mall_mongodb/log/mongodb.log --logappend --dbpath /home/yoga/workspace/mall_mongodb/data --rest
mongodb 종료하기
   mongo 실행후 콘솔창에서 use admin 입력하여 admin 디비에서 db.shutdownServer() 를 이용해서 종료
mongodb 관리창 열기 : --rest 옵션을 준상태에서만 사용가능
   http://실행ip:28017

collection 추가하기
  shell에서 mongo실행후
   use 컬렉션명
   show dbs : 존재하는 컬렉션명이 나온다 (use 컬렉션명한것은 insert하기 전까지는 안나온다)

collection 에 데이터 추가하기
  shell에서 mongo실행후
   item = {aa:2, bb:3}
  db.컬렉션명.save(item)

collection 에 데이터 찾기
  shell에서 mongo 실행후 
  db.컬렉션명.find() : 기본 limit 20으로 잡혀있고 shell명령어에 it를 입력하면 다음 cursor의 데이터를 출력해준다
  db.컬렉션명.find().limit(3) : 3건만 노출  
  var cursor = db.컬렉션명.find()
  while(cursor.hasNext()) printjson(cursor.next()); 
  cursor.forEach(printjson);
  cursor[4] : 5번째 cursor의 데이터를 출력한다 (list처럼 사용가능)
  cursor는 snapshot이 아니라서 여러사용자가 동시에 사용하면 값이 다를 수 있다
  db.컬렉션명.find({x:3}) : x:3인 문서만 찾는다 (sql로 치면 where x = 3 과 동일 find의 input은 document이다)
  db.컬렉션명.find({x:3}, {j:true}) : x:3인 문서만 찾고 return문서의 학목은 _id와 j 만 반환한다 (전체 document가 반환되는게 아니다)
  db.컬렉션명.findOne({x:3}) : x:3인 문서 한개만 반환한다 (cursor를 반환하는게 아니라 document 한개 또는 null을 반환한다)
And
prev | 1 | 2 | next