SlideShare a Scribd company logo
1 of 28
MongoDB로 진행하는 CRUD
대구개발자그룹
Jinwook Jeong
MongoDB
Documents
• 데이터의 기본 단위는 문서
• 문서의 특징
– 4MB의 제한을 가짐
– JSON과 같이 Key-Value Pair형태로 되어 있음
http://docs.mongodb.org/
MongoDB
Collection
• 컬렉션은 문서의 모음으로, table과 같은 개념
• 스키마를 가지지 않음
http://docs.mongodb.org/
MongoDB
Query
• query의 구성은 collection, query criteria, modifer로 구성됨
http://docs.mongodb.org/
MongoDB
Data Modification
• Data modification은 create, update, delete의 operation을 이용함
• users collection에 document의 추가예
http://docs.mongodb.org/
MongoDB
BSON
• BSON(Binary JSON)은 JSON의 Binary 표현
• JSON은 파워풀하지만, binary 데이터로 저장할 수 없음
– MongoDB는 BSON을 이용하여 데이터를 저장함
– 예 : {"hello": "world"}
 x16x00x00x00x02hellox00x06x00x00x00worldx00x00
MongoDB
Read Lock과 Write Lock
• DB별 Read Lock과 Write Lock을 가짐
• read Lock은 여러 Operation에서 공유가 가능한 반면, write olock은
하나의 Operation에서 사용가능
• 우선권
– write lock이 read lock보다 우선권을 갖는 이유로, write 작업이 많을때
DB Read작업을 할 수 없게 됨
MongoDB
몽고DB 실행
• 서버실행 : mongod --dbpath d:mongo
• 몽고DB쉘 : mongo
– 데이터 조작을 위한 몽고쉘(자바스크립트 쉘)을 제공한다.
MongoDB
몽고DB의 내부적인 특징
• 컬렉션은 스키마가 없는 테이블로 생각할 수 있다.
– 데이터의 기본 단위는 문서이며, 컬렉션은 문서의 모음이다.
• 모든 문서는 문서컬렉션 내에 유일키를 가진다
• 데이터형과 대소문자를 구분한다
– {“foo”:3}와 {“foo”:”3”}는 다르다
• 컬렉션 이름제약
– 몽고DB에서 정의한 함수명은 컬렉션이름이 될 수 없음
– ex : db.version
MongoDB
MongoDB 쉘의 기본명령어
• use [databasename]
– 데이터베이스 선택
• db
– 현재 선택된DB이름(변수) 확인
• show dbs
– show database names
• show collections
– show collections in current database
• db.[collection-name].drop()
– collection 삭제
• show users
– show users in current database
• show profile
MongoDB
MongoDB 쉘과 자바스크립트
• 자바스크립트의 for 루프 사용
• 함수호출
var collections=[“my”,”name”,”is”,”wook”];
for (i in collections){
doStuff(db.blog[collections[i]]);
}
function factorial (n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
factorial(5);
MongoDB
MongoDB 쉘에서의 CRUD
• create
– db.blog.insert({"key1":"value1"})
• read
– db.blog.find()
• 모든문서 반환
– db.blog.findOne()
• 한문서 반환
• db.blog.findOne({"key1":"value1"})
MongoDB
MongoDB 쉘에서의 CRUD
• Update
– db.blog.update({“key1":“value1“},{“key1”:”value2”})
• 갱신하려는 문서의 조건과 업데이트 데이터 필요
– post.comment=[]
– db.blog.update({title:"My Blog Post"},post)
• Delete
– db.blog.remove({“key1":“value1"})
– db.blog.remove({_id: ObjectId('55badd91c79bcbac2c3c1b95')})
MongoDB
Operator
• Operator
– Update와 관련된 연산자
– 분류
• query and projection operators
– comparison : eq,gt,gte,lt,lte,ne,in,nin
– logical : or, and, not, nor
– Element : exists, type
– Evaluation : mod, regex,text,where
– Geospatial : geowithin, geoIntersects,near, nearsphere
– array : all, elemMatch, size,
– comments : comment
– Projection Operators : $, $elemMatch, meta, slice
• update operators
– Fields : inc, mul,rename, setonInsert, set, unset, min, max,
currentDate
– Array : $, addtoSet, pop, pullAll, pull, pushAll, push
– Modifier : each, slice, sort, position
– Bitwise : bit
– Isolation : isolated
MongoDB
Operator
• aggregation pipeline operators
– Stage operators : project, match, redact, limit, skip, unwind, group,
sort, geoNear, out
– Boolean operators : and, or, not
– Set operators : setEquals, setIntersection, setUnion, setDifference,
setIsSubset, anyElementTrue, allElementsTrue
– Comparison operators : cmp, eq, gt, gte, lt, lte, ne
– Arithmetic Operators : add, substract, multiply, divide, mod
– String Operators : concat, substr, toLower, toUpper, strcasecmp
– TextSearch Operators : meta
– Array Operators : size
– Variable Operators : map, let
– Lteral Operators : literal
– Date Operators : dayofYear dayofMonth, dayOfWeek, year, month,
week, hour, minute, second, millisecond,dateToString
– Conditional Expressions : cond, ifNull
– Accumulatros : sum, avg, first, last, max, min, push, addToSet
MongoDB
Query Modifiers
• Modifiers
– 제한과 관련된 연산자
– comment,explain, hint, maxScan, maxTimeMS, max, min,
orderBy,returnKey,showDiskLoc,snapshot,query,
http://docs.mongodb.org/manual/reference/operator/
MongoDB
주요 Operator
• push
– array에 특정 값을 append함
• The $push operator appends a specified value to an array.
– Element 마지막에 item추가
– db.blog.update({}, {"$push" : {"x" : 1}})
• 마지막 요소부터 마지막 item에 추가
– db.blog.update({"score":1}, {"$push" : {"x" : 3}})
• 조건을 주어서 추가
db.blog.insert({"key1":"value1"})
db.blog.update({"key1":"value1"},{$push : {"key2":"value2"}})
http://docs.mongodb.org/manual/reference/operator/update/push/
append됨
MongoDB
주요 Operator
• 증감관련
– $inc (증가)
– db.blog.insert({"score":1})
– db.blog.update({"score":1},{"$inc":{"key":20}})
MongoDB
주요 Operator
• each
– multiple value를 array field에 붙여넣음
db.blog.insert({"key1":"value1"})
db.blog.update(
{"key1":"value1"},
{ $push: { scores: { $each: [ 90, 92, 85 ] } } })
MongoDB
주요 Operator
• 키관련
– $set (키추가)
• db.blog.insert({"score":1})
• db.blog.update({"score":1},{"$set":{"key":10}})
– $unset (키삭제)
• db.blog.update({"score":1},{"$unset":{"key":1}})
MongoDB
주요 Operator
• 대소비교
– $gte >= , $lte <=, $gt >, $lt <
– db.blog.insert({"score":1})
– db.blog.find({"score":{"$gte":1,"$lte":2}})
• not
– 1과 일치하지 않는 문서 찾기
– db.blog.find({"score":{"$ne":1}})
MongoDB
주요 Operator
• Size
db.food.insert({"_id" : 1, "fruit" : ["apple", "banana", "peach"]})
db.food.insert({"_id" : 2, "fruit" : ["apple", "kumquat", "orange"]})
db.food.insert({"_id" : 3, "fruit" : ["cherry", "banana", "apple"]})
db.food.find({"fruit":{"$size":3}})
MongoDB
조건절
blog = db.analytics.findOne({url : "/blog"})
if (blog) {
blog.pageviews++;
db.analytics.save(blog);
}else {
db.analytics.save({url : "/blog", pageviews : 1})
}
else의 여는 괄호가 바로 오도록 주의
upsert가 없는 경우
db.analytics.update({"url" : "/blog"}, {"$inc" : {"pageviews" : 1}}, true)
upsert가 있는 경우
해당숫자만큼 증가
(문서가 없으면 새로 할당)
• Upserts
– update의 특별한 타입. 문서가 없을때 생성, 있으면 업데이트
MongoDB
조건절
• Bulk기반 Upserts
– write operations의 리스트 기반으로 upsert 실행
Bulk.find(<query>).upsert().update(<update>);
Bulk.find(<query>).upsert().updateOne(<update>);
Bulk.find(<query>).upsert().replaceOne(<replacement>);
http://docs.mongodb.org/manual/reference/method/Bulk.find.upsert/
var bulk = db.blog.initializeUnorderedBulkOp();
bulk.find( {"key1":"value1"} ).upsert().replaceOne(
{
item: "abc123",
status: "P",
points: 100,
}
);
bulk.execute();
MongoDB
데이터형
• 불리언형 : {“x”:true}
• 부동소수점형 : {“x”:3.14},{“x”:3}
• 문자열형 : {“x”:”wook”}
• 날짜형 : {“x”:new Date()}
• Undefined 형 : {“x” : undefined}
• 배열 : {“x”:[“a”,”b”,”c”]}
• 내장문서 : {“x” : {“daegu”,”daejeon”}}
• 문서 “X”의 값으로, 내장문서를 가질 수 있음
• 객체 ID형 : {“x” : objectId()}
– 객체 ID형 문서의 고유한 12바이트 ID
• ....
MongoDB
ObjectIds
• ObjectID
– _id의 기본 데이터형
– 전통적인 auto increment 방식의 primary 키의 대체방식으로, 다중서버에서 고
유 값을 가질수 있도록 ObjectID가 생성됨
– 키구성
• Time : unix timestamp
• Machine : md5 hash of machine name
• Process id : pid
• Counter : incrementing value starting with a random number
MongoDB
Query - Regex
• Regex
– String match
– Digit match
• 문자열만 매칭됨을 유의
db.blog.insert({"name":"daegu"})
db.blog.find({"name":/daegu/})
db.blog.insert({"year":1990})
db.blog.find({"year":/^(199d|200d|2010)$/})
MongoDB
Performance Test
• Modifier Test
db.tester.insert({"x" : 1})
var timeInc = function() {
var start = (new Date()).getTime();
for (var i=0; i<100000; i++) {
db.tester.update({}, {"$inc" : {"x" : 1}});
db.getLastError();
}
var timeDiff = (new Date()).getTime() - start;
print("Updates took: "+timeDiff+"ms");
}
timeInc()

More Related Content

What's hot

Apache solr소개 20120629
Apache solr소개 20120629Apache solr소개 20120629
Apache solr소개 20120629Dosang Yoon
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리Junyi Song
 
Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Minchul Jung
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민종민 김
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]MongoDB
 
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.jsHeeJung Hwang
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항Minchul Jung
 
Redis data design by usecase
Redis data design by usecaseRedis data design by usecase
Redis data design by usecaseKris Jeong
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
Elasticsearch server Chapter5
Elasticsearch server Chapter5Elasticsearch server Chapter5
Elasticsearch server Chapter5Mungyu Choi
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaHyeonSeok Choi
 
아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) 아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) Jin wook
 
검색 서비스 간략 교육
검색 서비스 간략 교육 검색 서비스 간략 교육
검색 서비스 간략 교육 Rjs Ryu
 
Meteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 TrialMeteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 TrialSangwon Lee
 
[Week2] 데이터 스크래핑
[Week2] 데이터 스크래핑[Week2] 데이터 스크래핑
[Week2] 데이터 스크래핑neuroassociates
 
Fundamental of ELK Stack
Fundamental of ELK StackFundamental of ELK Stack
Fundamental of ELK Stack주표 홍
 
20140522 uc집계 정민철_발표자료_최종
20140522 uc집계 정민철_발표자료_최종20140522 uc집계 정민철_발표자료_최종
20140522 uc집계 정민철_발표자료_최종민철 정민철
 

What's hot (20)

Apache solr소개 20120629
Apache solr소개 20120629Apache solr소개 20120629
Apache solr소개 20120629
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리
 
Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
 
JSON with C++ & C#
JSON with C++ & C#JSON with C++ & C#
JSON with C++ & C#
 
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
 
Mongo db 최범균
Mongo db 최범균Mongo db 최범균
Mongo db 최범균
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
 
Redis data design by usecase
Redis data design by usecaseRedis data design by usecase
Redis data design by usecase
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
Elasticsearch server Chapter5
Elasticsearch server Chapter5Elasticsearch server Chapter5
Elasticsearch server Chapter5
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, Kibana
 
아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) 아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift)
 
검색 서비스 간략 교육
검색 서비스 간략 교육 검색 서비스 간략 교육
검색 서비스 간략 교육
 
Meteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 TrialMeteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 Trial
 
[Week2] 데이터 스크래핑
[Week2] 데이터 스크래핑[Week2] 데이터 스크래핑
[Week2] 데이터 스크래핑
 
elasticsearch
elasticsearchelasticsearch
elasticsearch
 
Fundamental of ELK Stack
Fundamental of ELK StackFundamental of ELK Stack
Fundamental of ELK Stack
 
20140522 uc집계 정민철_발표자료_최종
20140522 uc집계 정민철_발표자료_최종20140522 uc집계 정민철_발표자료_최종
20140522 uc집계 정민철_발표자료_최종
 

Similar to Mongo DB로 진행하는 CRUD

Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
MongoDB 하루만에 끝내기
MongoDB 하루만에 끝내기MongoDB 하루만에 끝내기
MongoDB 하루만에 끝내기Seongkuk Park
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석Daeyong Shin
 
Mongodb and spatial
Mongodb and spatialMongodb and spatial
Mongodb and spatialJiyoon Kim
 
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) InBum Kim
 
Big query at GDG Korea Cloud meetup
Big query at GDG Korea Cloud meetupBig query at GDG Korea Cloud meetup
Big query at GDG Korea Cloud meetupJude Kim
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVCArawn Park
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습smartstudy_official
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기Taegon Kim
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기WebFrameworks
 
Python codelab2
Python codelab2Python codelab2
Python codelab2건희 김
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Gruter
 
Node.js + Express + MongoDB
Node.js + Express + MongoDBNode.js + Express + MongoDB
Node.js + Express + MongoDBVincent Park
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxNeoClova
 
Mongo db로 배우는 nosql
Mongo db로 배우는 nosqlMongo db로 배우는 nosql
Mongo db로 배우는 nosqlSuwon Chae
 
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석smartstudy_official
 
Backend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsBackend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsKyunghun Jeon
 
LevelDB 간단한 소개
LevelDB 간단한 소개LevelDB 간단한 소개
LevelDB 간단한 소개종빈 오
 
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)NAVER D2
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바NeoClova
 

Similar to Mongo DB로 진행하는 CRUD (20)

Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
MongoDB 하루만에 끝내기
MongoDB 하루만에 끝내기MongoDB 하루만에 끝내기
MongoDB 하루만에 끝내기
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석
 
Mongodb and spatial
Mongodb and spatialMongodb and spatial
Mongodb and spatial
 
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
 
Big query at GDG Korea Cloud meetup
Big query at GDG Korea Cloud meetupBig query at GDG Korea Cloud meetup
Big query at GDG Korea Cloud meetup
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVC
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기
 
Python codelab2
Python codelab2Python codelab2
Python codelab2
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014
 
Node.js + Express + MongoDB
Node.js + Express + MongoDBNode.js + Express + MongoDB
Node.js + Express + MongoDB
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptx
 
Mongo db로 배우는 nosql
Mongo db로 배우는 nosqlMongo db로 배우는 nosql
Mongo db로 배우는 nosql
 
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
 
Backend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsBackend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build tools
 
LevelDB 간단한 소개
LevelDB 간단한 소개LevelDB 간단한 소개
LevelDB 간단한 소개
 
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바
 

More from Jin wook

자연어처리 소개
자연어처리 소개자연어처리 소개
자연어처리 소개Jin wook
 
클린 아키텍처 재해석
클린 아키텍처 재해석클린 아키텍처 재해석
클린 아키텍처 재해석Jin wook
 
Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발Jin wook
 
Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트Jin wook
 
Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Jin wook
 
MIPS CPU의 이해 (입문)
MIPS CPU의 이해 (입문)MIPS CPU의 이해 (입문)
MIPS CPU의 이해 (입문)Jin wook
 
PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정Jin wook
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용Jin wook
 
파이썬(Python) 소개
파이썬(Python) 소개파이썬(Python) 소개
파이썬(Python) 소개Jin wook
 
빅 데이터 개요 및 활용
빅 데이터 개요 및 활용빅 데이터 개요 및 활용
빅 데이터 개요 및 활용Jin wook
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여Jin wook
 

More from Jin wook (11)

자연어처리 소개
자연어처리 소개자연어처리 소개
자연어처리 소개
 
클린 아키텍처 재해석
클린 아키텍처 재해석클린 아키텍처 재해석
클린 아키텍처 재해석
 
Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발
 
Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트
 
Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발
 
MIPS CPU의 이해 (입문)
MIPS CPU의 이해 (입문)MIPS CPU의 이해 (입문)
MIPS CPU의 이해 (입문)
 
PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
 
파이썬(Python) 소개
파이썬(Python) 소개파이썬(Python) 소개
파이썬(Python) 소개
 
빅 데이터 개요 및 활용
빅 데이터 개요 및 활용빅 데이터 개요 및 활용
빅 데이터 개요 및 활용
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여
 

Mongo DB로 진행하는 CRUD

  • 2. MongoDB Documents • 데이터의 기본 단위는 문서 • 문서의 특징 – 4MB의 제한을 가짐 – JSON과 같이 Key-Value Pair형태로 되어 있음 http://docs.mongodb.org/
  • 3. MongoDB Collection • 컬렉션은 문서의 모음으로, table과 같은 개념 • 스키마를 가지지 않음 http://docs.mongodb.org/
  • 4. MongoDB Query • query의 구성은 collection, query criteria, modifer로 구성됨 http://docs.mongodb.org/
  • 5. MongoDB Data Modification • Data modification은 create, update, delete의 operation을 이용함 • users collection에 document의 추가예 http://docs.mongodb.org/
  • 6. MongoDB BSON • BSON(Binary JSON)은 JSON의 Binary 표현 • JSON은 파워풀하지만, binary 데이터로 저장할 수 없음 – MongoDB는 BSON을 이용하여 데이터를 저장함 – 예 : {"hello": "world"}  x16x00x00x00x02hellox00x06x00x00x00worldx00x00
  • 7. MongoDB Read Lock과 Write Lock • DB별 Read Lock과 Write Lock을 가짐 • read Lock은 여러 Operation에서 공유가 가능한 반면, write olock은 하나의 Operation에서 사용가능 • 우선권 – write lock이 read lock보다 우선권을 갖는 이유로, write 작업이 많을때 DB Read작업을 할 수 없게 됨
  • 8. MongoDB 몽고DB 실행 • 서버실행 : mongod --dbpath d:mongo • 몽고DB쉘 : mongo – 데이터 조작을 위한 몽고쉘(자바스크립트 쉘)을 제공한다.
  • 9. MongoDB 몽고DB의 내부적인 특징 • 컬렉션은 스키마가 없는 테이블로 생각할 수 있다. – 데이터의 기본 단위는 문서이며, 컬렉션은 문서의 모음이다. • 모든 문서는 문서컬렉션 내에 유일키를 가진다 • 데이터형과 대소문자를 구분한다 – {“foo”:3}와 {“foo”:”3”}는 다르다 • 컬렉션 이름제약 – 몽고DB에서 정의한 함수명은 컬렉션이름이 될 수 없음 – ex : db.version
  • 10. MongoDB MongoDB 쉘의 기본명령어 • use [databasename] – 데이터베이스 선택 • db – 현재 선택된DB이름(변수) 확인 • show dbs – show database names • show collections – show collections in current database • db.[collection-name].drop() – collection 삭제 • show users – show users in current database • show profile
  • 11. MongoDB MongoDB 쉘과 자바스크립트 • 자바스크립트의 for 루프 사용 • 함수호출 var collections=[“my”,”name”,”is”,”wook”]; for (i in collections){ doStuff(db.blog[collections[i]]); } function factorial (n) { if (n <= 1) return 1; return n * factorial(n - 1); } factorial(5);
  • 12. MongoDB MongoDB 쉘에서의 CRUD • create – db.blog.insert({"key1":"value1"}) • read – db.blog.find() • 모든문서 반환 – db.blog.findOne() • 한문서 반환 • db.blog.findOne({"key1":"value1"})
  • 13. MongoDB MongoDB 쉘에서의 CRUD • Update – db.blog.update({“key1":“value1“},{“key1”:”value2”}) • 갱신하려는 문서의 조건과 업데이트 데이터 필요 – post.comment=[] – db.blog.update({title:"My Blog Post"},post) • Delete – db.blog.remove({“key1":“value1"}) – db.blog.remove({_id: ObjectId('55badd91c79bcbac2c3c1b95')})
  • 14. MongoDB Operator • Operator – Update와 관련된 연산자 – 분류 • query and projection operators – comparison : eq,gt,gte,lt,lte,ne,in,nin – logical : or, and, not, nor – Element : exists, type – Evaluation : mod, regex,text,where – Geospatial : geowithin, geoIntersects,near, nearsphere – array : all, elemMatch, size, – comments : comment – Projection Operators : $, $elemMatch, meta, slice • update operators – Fields : inc, mul,rename, setonInsert, set, unset, min, max, currentDate – Array : $, addtoSet, pop, pullAll, pull, pushAll, push – Modifier : each, slice, sort, position – Bitwise : bit – Isolation : isolated
  • 15. MongoDB Operator • aggregation pipeline operators – Stage operators : project, match, redact, limit, skip, unwind, group, sort, geoNear, out – Boolean operators : and, or, not – Set operators : setEquals, setIntersection, setUnion, setDifference, setIsSubset, anyElementTrue, allElementsTrue – Comparison operators : cmp, eq, gt, gte, lt, lte, ne – Arithmetic Operators : add, substract, multiply, divide, mod – String Operators : concat, substr, toLower, toUpper, strcasecmp – TextSearch Operators : meta – Array Operators : size – Variable Operators : map, let – Lteral Operators : literal – Date Operators : dayofYear dayofMonth, dayOfWeek, year, month, week, hour, minute, second, millisecond,dateToString – Conditional Expressions : cond, ifNull – Accumulatros : sum, avg, first, last, max, min, push, addToSet
  • 16. MongoDB Query Modifiers • Modifiers – 제한과 관련된 연산자 – comment,explain, hint, maxScan, maxTimeMS, max, min, orderBy,returnKey,showDiskLoc,snapshot,query, http://docs.mongodb.org/manual/reference/operator/
  • 17. MongoDB 주요 Operator • push – array에 특정 값을 append함 • The $push operator appends a specified value to an array. – Element 마지막에 item추가 – db.blog.update({}, {"$push" : {"x" : 1}}) • 마지막 요소부터 마지막 item에 추가 – db.blog.update({"score":1}, {"$push" : {"x" : 3}}) • 조건을 주어서 추가 db.blog.insert({"key1":"value1"}) db.blog.update({"key1":"value1"},{$push : {"key2":"value2"}}) http://docs.mongodb.org/manual/reference/operator/update/push/ append됨
  • 18. MongoDB 주요 Operator • 증감관련 – $inc (증가) – db.blog.insert({"score":1}) – db.blog.update({"score":1},{"$inc":{"key":20}})
  • 19. MongoDB 주요 Operator • each – multiple value를 array field에 붙여넣음 db.blog.insert({"key1":"value1"}) db.blog.update( {"key1":"value1"}, { $push: { scores: { $each: [ 90, 92, 85 ] } } })
  • 20. MongoDB 주요 Operator • 키관련 – $set (키추가) • db.blog.insert({"score":1}) • db.blog.update({"score":1},{"$set":{"key":10}}) – $unset (키삭제) • db.blog.update({"score":1},{"$unset":{"key":1}})
  • 21. MongoDB 주요 Operator • 대소비교 – $gte >= , $lte <=, $gt >, $lt < – db.blog.insert({"score":1}) – db.blog.find({"score":{"$gte":1,"$lte":2}}) • not – 1과 일치하지 않는 문서 찾기 – db.blog.find({"score":{"$ne":1}})
  • 22. MongoDB 주요 Operator • Size db.food.insert({"_id" : 1, "fruit" : ["apple", "banana", "peach"]}) db.food.insert({"_id" : 2, "fruit" : ["apple", "kumquat", "orange"]}) db.food.insert({"_id" : 3, "fruit" : ["cherry", "banana", "apple"]}) db.food.find({"fruit":{"$size":3}})
  • 23. MongoDB 조건절 blog = db.analytics.findOne({url : "/blog"}) if (blog) { blog.pageviews++; db.analytics.save(blog); }else { db.analytics.save({url : "/blog", pageviews : 1}) } else의 여는 괄호가 바로 오도록 주의 upsert가 없는 경우 db.analytics.update({"url" : "/blog"}, {"$inc" : {"pageviews" : 1}}, true) upsert가 있는 경우 해당숫자만큼 증가 (문서가 없으면 새로 할당) • Upserts – update의 특별한 타입. 문서가 없을때 생성, 있으면 업데이트
  • 24. MongoDB 조건절 • Bulk기반 Upserts – write operations의 리스트 기반으로 upsert 실행 Bulk.find(<query>).upsert().update(<update>); Bulk.find(<query>).upsert().updateOne(<update>); Bulk.find(<query>).upsert().replaceOne(<replacement>); http://docs.mongodb.org/manual/reference/method/Bulk.find.upsert/ var bulk = db.blog.initializeUnorderedBulkOp(); bulk.find( {"key1":"value1"} ).upsert().replaceOne( { item: "abc123", status: "P", points: 100, } ); bulk.execute();
  • 25. MongoDB 데이터형 • 불리언형 : {“x”:true} • 부동소수점형 : {“x”:3.14},{“x”:3} • 문자열형 : {“x”:”wook”} • 날짜형 : {“x”:new Date()} • Undefined 형 : {“x” : undefined} • 배열 : {“x”:[“a”,”b”,”c”]} • 내장문서 : {“x” : {“daegu”,”daejeon”}} • 문서 “X”의 값으로, 내장문서를 가질 수 있음 • 객체 ID형 : {“x” : objectId()} – 객체 ID형 문서의 고유한 12바이트 ID • ....
  • 26. MongoDB ObjectIds • ObjectID – _id의 기본 데이터형 – 전통적인 auto increment 방식의 primary 키의 대체방식으로, 다중서버에서 고 유 값을 가질수 있도록 ObjectID가 생성됨 – 키구성 • Time : unix timestamp • Machine : md5 hash of machine name • Process id : pid • Counter : incrementing value starting with a random number
  • 27. MongoDB Query - Regex • Regex – String match – Digit match • 문자열만 매칭됨을 유의 db.blog.insert({"name":"daegu"}) db.blog.find({"name":/daegu/}) db.blog.insert({"year":1990}) db.blog.find({"year":/^(199d|200d|2010)$/})
  • 28. MongoDB Performance Test • Modifier Test db.tester.insert({"x" : 1}) var timeInc = function() { var start = (new Date()).getTime(); for (var i=0; i<100000; i++) { db.tester.update({}, {"$inc" : {"x" : 1}}); db.getLastError(); } var timeDiff = (new Date()).getTime() - start; print("Updates took: "+timeDiff+"ms"); } timeInc()

Editor's Notes

  1. 77p
  2. criteria : 범위 modifer: 제한자
  3. db.blog.insert({"":""}) db.blog.update({"":""},{"":""}) db.blog.remove({"":""})
  4. db.blog.insert({"":""}) db.blog.update({"":""},{"":""}) db.blog.remove({"":""})
  5. operator 연산자 39p
  6. operator 연산자 39p
  7. 57p
  8. 57p