'MongoDB'에 해당되는 글 3건

  1. 2011.12.27 :: MongoDB 데이터형
  2. 2011.12.26 :: MongoDB 설치 및 시작
  3. 2011.12.26 :: MongoDB 기본
Database/MongoDB 2011. 12. 27. 21:15
1. 기본 데이터형
   1) null형 : null 값과 존재하지 않는 필드를 표현하는 데 사용한다.
   2) 불리언형 : true 와 false 값에 사용한다.
   3) 32비트 정수형 : 쉘에서는 표현할 수 없다. 부동소수점형으로 변환된다.
   4) 64비트 정수형 : 쉘에서 표현할 수 없다. 내장 문서를 통해 표현한다.
   5) 64비트 부동소수점형 : 쉘 내 모든 숫자는 이 데이터형이다.
   6) 문자열형 : 모든 UTF-8 문자열은 문자열형으로 표현할 수 있다.
   7) 심볼형 : 쉘에서 지원하지 않는다. 문자열로 변환한다.
   8) 객체ID형 : 문서의 고유한 12바이트 ID이다.
   9) 날짜형 : 표준시간대는 저장하지 않고 1970년 1월1일 이후의 시간 흐름을 1/1000 초로 저장한다.
   10) 정규표현식형 : 문서는 자바스크립트 문법의 정규표현식을 포함할 수 있다.
   11) 코드형 : 문서는 자바스크립트 코드도 포함할 수 있다.
   12) 이진 데이터형 : 쉘에서 조작할 수 없다. 임의의 바이트 문자열로 변환된다.
   13) 최대값형 : 쉘에서는 해당 데이터형이 없다.
   14) 최소값형 : 쉘에서는 해당 데이터형이 없다.
   15) undefined : 문서내에서 사용할 수 있다.
   16) 배열 : 값의 집합 또는 목록을 배열로 표현할 수 있다.
   17) 내장문서 : 부모 문서에 값으로 내장되는 형태로 포함될 수 있다.

2. 숫자
   - 기본적으로 모든 숫자는 더블형으로 취급한다.
   - 더블형으로 정확하게 표현할 수 없는 8바이트 정수를 삽입한다면, 쉘은 32비트 정수를 구성하는 높은 자리수 4바이트와 낮은 자리수 4바이트를 나타내는 'top' 과 'bottom'이라는 두 키를 추가한다.

3. 날짜
   - 자바스크립트의 날짜 객체를 사용한다.
   - 새로운 날짜 객체를 생성할땐 항상 new Date()를 써야한다.
   - 시간대 정보는 포함하지 않으므로 필요하다면 다른 키로 저장해야한다.

4. 배열
   - MongoDB는 배열의 구조를 '이해'하고, 배열의 내용물을 어떻게 '안에서 꺼내어' 연산해야 하는지 알고 있다.
   - 이를 통해 배열에 쿼리하고 그 내용물을 써서 색인을 만들 수 있다.

5. 내장 문서
   - 다른 문서 내 키의 값으로 쓰이는 MongoDB 문서 전체를 뜻한다.
   - RDBMS 에서는 두 테이블로 분리하여 저장할 것을 MongoDB에서는 하나에 저장하였으므로 비정규화에 해당한다.
   - 따라서 수정시에는 각각을 일일이 수정해줘야 한다.

6. _id와 ObjectIds
   - 모든 문서는 "_id" 키를 가지고 있다.
   - 어떤 데이터형이라도 될 수 있지만 ObjectId형이 기본이다.
   - 하나의 컬렉션 내에서는 고유한 식별자이다.
   - ObjectId 는 12바이트의 고유한 자동생성 데이터이다.
   - 문서가 삽입되었을 때 "_id" 키가 없으면 자동으로 추가된다.
   - 서버에서도 처리할 수 있지만 클라이언트에 비용을 전가함으로 서버 부담을 줄인다.

'Database > MongoDB' 카테고리의 다른 글

MongoDB 설치 및 시작  (0) 2011.12.26
MongoDB 기본  (0) 2011.12.26
posted by kirhieyes
:
Database/MongoDB 2011. 12. 26. 22:33
1. 서비스 시작
   - mongod.exe 를 통해 시작한다.
   - 인자없이 실행하면 기본 데이터 디렉토리로 c:\data\db, 포트로 27017번을 사용한다. ( 데이터 디렉토리가 없거나 쓰기 권한이 없으면 서버 시작 실패가 된다. )
   - 주 포트보다 1,000이 높은 포트에서 기본 HTTP 서버를 시작한다. 이는 웹브라우저를 열고 http://localhost:28017로 접속하면 관리정보를 볼 수 있다는 뜻이다.
   - 서버 실행중 ctrl + C 를 누르면 mongod를 안전하게 중지할 수 있다.

2. MongoDB 쉘
   - 커맨드라인에서 자바스크립트 쉘을 제공한다.
   - mongo 를 통해 실행을 시작한다.
   - 쉘은 시작 시 자동으로 MongoDB 서버에 접속을 시도하기 때문에 서버를 항상 먼저 시작해야한다.
   - 온전한 자바스크립트 해석기로 자바스크립트의 표준 라이브러리를 모두 사용할 수 있다.
   - 자바스크립트 함수 정의 및 호출도 할 수 있다.
   - 쉘은 엔터를 쳤을 때 구문이 완료되었는 지 감지하고, 완료되지 않았을 경우 다음 줄에서 명령어를 입력할 수 있게 해준다.

3. MongoDB 클라이언트
   - 쉘의 진수는 독자적으로 쓸 수 있는 MongoDB 클라이언트라는 데 있다.
   - 쉘이 시작될 때 MongoDB 서버의 test 데이터베이스에 연결하고 이 데이터베이스 연결을 전역 변수 db 에 할당한다.
   - 쉘에서는 주로 이 변수를 통해 MongoDB에 접근한다.
   - 쉘은 SQL 사용자에게 친숙한 문법을 제공한다. ( 자바스크립트와는 또 다른 )
   - 컬렉션은 db 변수를 통해 접근할 수 있다.

3. CRUD 작업
>post = {"title": "My Blog Post",
             "content": "Here's my blog post",
             "date": new Date() }

   - 생성 : db.blog.insert(post)
   - 조회 : db.blog.find(),    하나만 조회할 경우 findOne()
   - 갱신 : 두개의 매개 변수가 필요한다.
     1) 갱신하려는 문서를 찾는 조건
     2) 새로운 문서
>post.comments = []

    - db.blog.update( { title: "My Blog Post" }, post )
    - 삭제 : db.blog.remove( { title: "My Blog Post" } )
    - 문서삭제 : delete post.title;

4. 쉘 활용 팁
   - 쉘에서 help 를 입력하면 대부분의 API, 메서드 몸체등을 모두 살펴볼 수 있다. 생각안날때 자주 이용하자.
   - http://api.mongodb.org/js 에 방문하면 모든 자바스크립트 함수의 API 문서를 확인할 수 있다.

5. 메서드명과 중복되는 컬렉션 이름 얻기
   - MongoDB는 자바스크립트가 db 속성을 우선 찾고 없을 경우 컬렉션을 검색하기 때문에 자바스크립트 속성과 이름이 같을 경우 컬렉션에 접근할 수 없다.
   - getCollection() : 찾을 컬렉션명을 인자로 넘겨 컬렉션에 접근한다.
      db.getCollection("version");

6. for ~ in 문을 이용하여 서브컬렉션에 반복적인 작업 수행하기
>var collections = ["posts", "comments", "authors"];
   for ( i in collections ){
     doStuff(db.blog[collections[i]]);
   }

'Database > MongoDB' 카테고리의 다른 글

MongoDB 데이터형  (0) 2011.12.27
MongoDB 기본  (0) 2011.12.26
posted by kirhieyes
:
Database/MongoDB 2011. 12. 26. 21:57
1. 데이터의 기본 단위 : 문서
   1) 문서의 키는 문자열형이다. 몇 예외를 빼고는 키로 어떤 UTF-8 문자라도 쓸 수 있다.
   2) \0 (null 문자)을 포함하지 않는다. 이 문자는 키의 끝을 나타내는데 쓴다.
   3) .과 $문자는 예약어로 취급해야 하며, 특정 상황에서만 사용한다.
   4) 일반적으로 _로 시작하는 키는 예약어로 생각하는 편이 좋다.
   5) 데이터형과 대소문자를 구별한다.
   6) 키는 중복될 수 없다.

2. 문서의 모음 : 컬렉션
   1) 문서가 RDB의 행이라면 컬렉션은 테이블로 볼 수 있다.
   2) 스키마가 없다. ( 즉, 하나의 컬렉션 내 문서들이 모두 다른 구조를 가질 수 있다는 뜻 )
   3) 스키마가 없는 데 하나의 컬렉션에 모든 데이터를 저장하지 않고 컬렉션을 나누는 이유
     - 쿼리를 적용할 때 구조가 다르다면 번거롭게 된다.
     - 섞여 있는 구조에서 쿼리를 실행할 때 보다 동일 구조로 되어 있으면 실행 속도가 훨씬 빠르다.
     - 데이터를 구분하기 위해서 나눈다. (게시판 데이터는 게시판 데이터끼리, 회원 데이터는 회원 데이터끼리)
     - 색인을 이용할 경우 문서는 특정 구조를 가져야 한다.
   4) 컬렉션은 이름으로 식별한다. 어떤 UTF-8 문자열도 쓸 수 있다.
     - 빈 문자열("")은 유효한 이름이 아니다.
     - \0(null 문자)은 컬렉션 이름의 끝을 나타내는 문자이므로 사용할 수 없다.
     - system.으로 시작하는 이름은 예약어이기 때문에 사용할 수 없다.
     - 사용자 생성 이름에 $문자를 사용할 수 없다.
   5) 컬렉션을 체계화하기 위해 서브컬렉션을 쓴다.
     - 네임스페이스 방식으로 .문자를 이용한다.
     - blog.posts 와 blog.authors 라는 컬렉션 이름을 사용하였을 경우 오직 체계화를 위한 네이밍일 뿐 blog와 '자식'컬렉션 간에는 아무런 관계가 없다. 심지어 blog 컬렉션은 없어도 된다.
    - 하지만 데이터를 체계화할 수 있는 훌륭한 방법으로 권장된다.

3. 여러 컬렉션의 모음 : 데이터베이스
   1) 하나의 데이터베이스는 자체 권한을 가지고 있으며 따로 분리된 파일로 디스크에 저장된다.
   2) 컬렉션과 마찬가지로 데이터베이스도 이름으로 식별한다.
     - 어떤 UTF-9 문자열도 가능하다.
     - 빈 문자열("")은 유효하지 않다.
     - 다음 문자는 포함할 수 없다. ''(공백문자), . ,$, /, \, \0
     - 모두 소문자이어야 한다.
     - 이름은 최대 64바이트이다.
   3) 데이터베이스 이름은 파일시스템 상에서 파일이 된다.
   4) 예약된 데이터 베이스 이름도 있다.
     - admin : 인증의 관점에서 'root' 데이터베이스이다. 모든 데이터베이스를 조회하거나 서버 전역에 걸쳐 실행하는 명령어들은 오직 admin 데이터베이스에서만 실행 가능하다.
     - local : 절대로 복제되지 않기 때문에 특정 서버에만 저장하는 컬렉션에 사용된다.
     - config : MongoDB를 샤딩설정하는 경우 config 데이터베이스는 내부적으로 샤드정보를 저장하는 데 쓴다.
   5) 컬렉션을 저장하는 데이터베이스의 이름을 컬렉션 이름 앞에 붙이는 것으로 올바른 컬렉션 이름인 네임스페이스를 얻을 수 있다. 예를 들어 cms 데이터베이스의 blog.posts 컬렉션을 사용한다면, 컬렉션의 네임스페이스는 cms.blog.posts가 된다.

4. 그외 참고
http://www.mongodb.org/
- MongoDB 홈페이지, document가 잘 되어 있으며, sql문과 비교를 통해 쿼리를 쉽게 이해하게 해준다.

'Database > MongoDB' 카테고리의 다른 글

MongoDB 데이터형  (0) 2011.12.27
MongoDB 설치 및 시작  (0) 2011.12.26
posted by kirhieyes
: