SlideShare une entreprise Scribd logo
1  sur  116
Télécharger pour lire hors ligne
The MongoDB Strikes Back / MongoDB 의 역습
THE
MongoDB
Strikes BacK
nosql wars saga continues
Episode 4
MongoDB
Strikes BacK
새로운 희망
Episode 5
MongoDB
Strikes BacK
몽고의 역습
Episode 6
MongoDB
Strikes BacK
나머지 이야기
Episode 1
MongoDB
Strikes BacK
Episode 2
MongoDB
Strikes BacK
Episode 3
MongoDB
Strikes BacK
Episode 4
MongoDB
Strikes BacK
새로운 희망
Episode 5
MongoDB
Strikes BacK
몽고의 역습
Episode 6
MongoDB
Strikes BacK
나머지 이야기
The MongoDB Strikes Back / MongoDB 의 역습
Episode 1
MongoDB
Strikes BacK
보이지 않는 시장
저는 스마트스터디에서 일하고 있습니다
스마트스터디는 다양한 모바일 앱을
만들고 직접 서비스하는 회사입니다
하필이면 2010년에 창업을 해서
후...
=3
다양한 앱을 만들어 서비스하면
역시나 정신이 하나도 없습니다
The MongoDB Strikes Back / MongoDB 의 역습
정신 없을 때에는 로그를 쌓아
분석하느라 정신이 더 없어집니다
다른 할 일이 많다는 것을 핑계로
가장 편리해 보이는 것을 골랐습니다
Episode 2
MongoDB
Strikes BacK
몽고의 습격
A long time ago in a NoSQL era
far, far away . . . .
AAvailability
CConsistency
PPartition Tolerance
Traditional
RDBMS
MongoDB
HBase, Redis
DynamoDB
Cassandra
AAvailability
CConsistency
PPartition Tolerance
Traditional
RDBMS
MongoDB
HBase, Redis
DynamoDB
Cassandra
365일
24시간
항시 대기
한입으로
두말하기
없기
뼈와 살이
분리되어도
연락하기
Overview
•Document Database
•High Performance
•High Availability
•Easy Scalability
•Document Database
•High Performance
•High Availability
•Easy Scalability
Overview
•Document Database with JSON
•High Performance ... Really?
•High Availability by ReplicaSet
•Easy Scalability via Sharding
Document Database
•JSON 으로 받아, BSON 으로 저장.
•아무 생각 없이 저장해도, 일단 동작한다.
•프로그래밍 언어에서 쓰던 데이터의 형태
그대로 저장할 수 있는 것이 장점.
Document Database
•MySQL과 같은 RDB 시스템 대비,
•테이블 스키마가 없다.
•즉, ALTER TABLE 이 없음.
•인덱스 추가 / 변경도 원하는 때에
background 로 처리 가능.
Document Database
•MySQL과 같은 RDB 시스템 대비,
•콜렉션 내 데이터의 형식이 달라도 됨.
•애플리케이션 레벨에서 알아서 사용.
•JOIN 대신 embedding 문서를
unwind 로 풀어서 쓰는 패턴.
High Performance
•경우에 따라 다르지만, 느리지 않음.
•Memory-mapped file 을 그냥 사용.
•메모리 용량 내에서는 = Page Fault 발생
전까지는 In-memory DB 급의 성능.
High Availability
•과거의 Master-Slave Replication 대신,
•3대 이상의 노드가 결합된 보다 안정적인
ReplicaSet 지원.
•Single Primary - Multiple Secondary
•ReplicaSet 내에서 자동 Failover 지원.
Replication
High Availability
SECONDARY
PRIMARY
SECONDARY
Replication
Replication
High Availability
SECONDARY
PRIMARY
SECONDARY
Heartbeat
Replication
Heartbeat
Heartbeat
Heartbeat / every 2 seconds
Replication
High Availability
SECONDARY
PRIMARY
SECONDARY
Heartbeat
Replication
Heartbeat
Heartbeat
Heartbeat Heartbeat
Heartbeat failure / after 10 seconds
High Availability
SECONDARY
PRIMARY
SECONDARY
Heartbeat
Voting
High Availability
PRIMARY
PRIMARY
SECONDARY
Heartbeat
Replication
Easy Scalability
•문서의 특정 필드를 Shard key 로 지정.
•N 대의 shard 에 데이터를 분산 저장.
•조회나 통계 명령어를 경우에 따라 각
shard 에서 나눠서 실행 가능.
mongod
Forward
mongod
Forward
Easy Scalability
mongos
Request
Look up
Shard Key
Easy Scalability
•Shard key로 지정된 필드의 값이 충분히
분산되지 않을 경우, 특정 shard에 데이터
(chunk)가 몰리는 현상이 생길 수 있음.
•이를 피하기 위해 MongoDB 2.4 부터
Hashed Sharding 지원.
•아직까지는 MD5만 사용.
The MongoDB Strikes Back / MongoDB 의 역습
My Overview
•설치가 간편하다.
•All-in-One.
•Key-Value DB 들에 비해 쓰기 편하다.
•Geospatial Index / Query 지원.
•제작사 10gen의 공식 교육 프로그램 존재.
https://education.10gen.com/
언제까지	 셋업만	 할	 것인가?
우리는	 당장	 통계를	 내야한다
몽고디비를	 설치하라!
이것저것
따져보기
귀찮을때
몽고디비
Episode 3
MongoDB
Strikes BacK
몽고의 함정
Legacy strategy
•MongoDB 1.6 기반으로 작업.
•데이터베이스를 쪼개도, 콜렉션을 쪼개도
관계 없이 모든 작업은 어쨌든 글로벌 락.
•이왕 이렇게 된거, 하나의 콜렉션으로!
The MongoDB Strikes Back / MongoDB 의 역습
Pitfall
•MongoDB 1.6 기준,
•일단 잔뜩 쌓긴 쌓았는데...
•느리고 쓰기가 어려운 MapReduce.
•통계 관련 명령어가 빈약.
•저장 후, 디스크에 잘 쓰였을까 불안함.
The MongoDB Strikes Back / MongoDB 의 역습
Server
Apache httpd
mod_php
Server
Redis
Apache httpd
mod_php
Predis
Server
Apache httpd
mod_php
PredisPredis
ReplicaSet
Secondary Secondary
Primary
Redis
PV / UV
DAU / MAU
PU / ARPU
NRU / RR
ReplicaSet
유통기한 초과
MongoDB today
230
20,000,000
10,000,000,000
MongoDB today
230로그
20,000,000로그
10,000,000,000바이트
초당
일간
일간
MongoDB today
•누적 35억 건 정도.
•적다면 적고, 많다면 많은 양.
•양이 많아지니, 로그를 옮기는 시간이 문제.
•결국 실시간 통계 자료가 아니게 됨.
No free lunch
Failover / Auto-balancing
언제나 원하는 대로 된다면야
Deploying Hell
•한 대에 간편하게 설치해서 쓸 수도 있지만,
Deploying Hell
mongod
Single
Deploying Hell
Master
Master - Slave Replication
Slave
Replication
Deploying Hell
Replication Replication
PRIMARY
SECONDARY SECONDARY
Replicaset
Deploying Hell
mongos
mongod mongod
Shard
mongod
Deploying Hell
mongos
mongod mongod
Shard
mongod
mongos mongos
Deploying Hell
mongos
mongod mongod
Shard
mongod
mongos mongos
Config servers
mongod mongodmongod
Deploying Hell
Sharded Cluster
Replicaset
SECONDARY
PRIMARY
SECONDARY
Replicaset
SECONDARY
PRIMARY
SECONDARY
Replicaset
SECONDARY
PRIMARY
SECONDARY
mongosmongos mongos
Config servers
mongod mongodmongod
Replicaset
SECONDARY
PRIMARY
SECONDARY SECONDARY ARBITER
mongosmongos mongos
Config servers
mongod mongodmongod
Replicaset
SECONDARY
PRIMARY
SECONDARY SECONDARYSECONDARY ARBITERARBITER
Replicaset
SECONDARY
PRIMARY
SECONDARY SECONSECONDARYARBITER
Replicaset
SECONDARY
PRIMARY
SECONDARY SECONDARYSECONDARY ARBITERARBITER
Replicaset
SECONDARY
PRIMARY
SECONDARY
SECONDARY
CONDARY
ARBITER
Deploying Hell
•목적에 맞는 “적절한” 설계가 필요.
•실시간으로 처리해야 하는 데이터 크기는?
•단순히 Shard node를 추가한다고 해서 병
렬 처리량이 늘어나는 것은 아니다.
•SSD / RAM 추가 등의 하드웨어 변경에 따
른 성능 향상 폭이 큼.
Episode 4
MongoDB
Strikes BacK
새로운 희망
New Hope
•MongoDB 버전에 따른 기능 추가
Aggregation framework 2.1
Database-level lock 2.2
Yield lock on page fault 2.2
V8 JavaScript engine 2.4
Aggregation framework
•MongoDB 2.1
•파이프라인을 통해 여러 조건과 값 추출을
연쇄적으로 지정할 수 있음.
•기존의 콜렉션 함수군에서 제공하는 것보다
강력한 기능을 제공.
Aggregation framework
•Map / Reduce 가 있는데 또?
•Javascript 구현이 아닌,
•통계 전용 C++ 구현.
•Collection에 있던 일부 통계 함수들은?
•그냥 놔두고 따로 구현.
Aggregation framework
•기존 Collection 함수 대비 뭐가 나은가?
•제약 조건이 덜하다.
•파이프라인별 결과가 16MB 까지.
•그외 메모리 사용량 제한.
•SQL 만큼은 아니지만 좀 더 편하다.
Aggregation example
SELECT DISTINCT last_name FROM users
db.users.distinct('last_name')
SQL
Collection
db.users.aggregate( [
{ $group: { _id: '$last_name' } }
] )
Aggregation
Simple distinct
SELECT team, SUM(score) AS total, COUNT(*)
FROM scoreboard
GROUP BY team
ORDER BY total DESC
SQL
Group Summary
db.scoreboard.group( {
key: { team: true },
initial: { total: 0, count: 0 },
reduce: function(obj, prev) {
prev.total += obj.score;
prev.count += 1;
}
} )
Collection with MapReduce
Group Summary
db.scoreboard.aggregate( [
{ $group: { _id:"$team",
total: { $sum: "$score" } } },
{ $sort: { total: -1 } }
] )
Aggregation
Group Summary
SELECT msg FROM feed
WHERE user_id IN
( SELECT id_to FROM friend
WHERE id_from = x )
ORDER BY written_dt
DESC LIMIT 10
SQL
My friends feed
db.feed.find( {
user_id: { $in: db.friend.group( {
cond: { id_from: x },
initial: { friends: [] },
reduce: function(obj, prev) {
prev.friends.push(obj.id_to);
}
} )[‘friends’] }, { msg:1, _id:0 } )
.sort( { written_dt: -1 } )
.limit( 10 );
Collection with MapReduce
My friends feed
Aggregation
조인, 서브쿼리
그런거 안돼요ㅋ
My friends feed
Aggregation framework
•SQL to Aggregation Framework
Mapping Chart 참고.
•SQL 처럼 WHERE, GROUP, ORDER ...
다 되는 것 같지만 실제로는 한계가 많음.
•조인이나 서브쿼리가 안되므로 필요하면
embedding.
Aggregation framework
•대단한 줄 알았는데 별거 없네?
•그래도 MapReduce 보다 몇 배 빠름.
•Javascript 엔진이 바뀌었어도 여전히
BSON to JSON 변경에 시간이 소요.
•여러 Aggregation 을 동시에 수행 가능.
Database-level lock
1.6 Global lock
2.0
Global lock
Yield the write lock
2.2 ~ 2.4
Database-level lock
Yield lock on page fault
Future Collection-level lock
Yield lock on page fault
•읽고 쓰는 과정에서 데이터가 메모리에 없
다고 판단되면, 락을 다른 작업에게 양보.
•또는 읽고 쓰는 과정이 길어지면, 잠시 다른
프로세스에게 락을 양보.
•모든 데이터가 메모리에 올라와 있는 상황
에서는 별 차이 없음.
Yield lock on page fault
•http://blog.serverdensity.com/goodbye-
global-lock-mongodb-2-0-vs-2-2/
V8 JavaScript engine
•MongoDB 2.4
•기존에 사용하던 SpiderMonkey 가 싱글
스레드로 동작하는 등 성능의 제약이 많음.
•V8 으로 자바스크립트 엔진을 변경.
•MapReduce 를 비롯한 각종 통계성 함수
를 복수로 실행하는 것이 가능.
Episode 5
MongoDB
Strikes BacK
몽고의 역습
Production setup
Replication
SECONDARY
PRIMARY
SECONDARY
Replication
Production setup
•Dell R510 x 3
•Intel(R) Xeon(R) L5520 @ 2.27GHz
•4GB RAM @ 1333MHz x 4 = 16GB
•Perc H700 RAID 1+0
•SATA 2TB x 6 ( 3 stripped )
The MongoDB Strikes Back / MongoDB 의 역습
Production setup
•하드웨어는 그대로.
•MongoDB 버전업에 따라 콜렉션을 나눔.
•기존에는 하나의 콜렉션에 모두 넣기.
•로그를 남기는 앱과 로그 종류에 따라 서
로 다른 콜렉션에 남기도록 변경.
•용량을 절약하기 위해 키 이름도 줄임.
Production setup
timezone tz
language l
appid ai
appversion av
country c
Production setup
로그 1개당 평균 용량
454bytes 에서 337bytes 로
25.7% 절약
Production setup
•문서에 값으로 들어 있던 로그 주체와 이벤
트 이름이 빠지면서 용량 절약.
•원래는 조회를 위해 위 두 값을 포함하여 인
덱스가 걸려 있었는데, 빠지면서 더 많은 인
덱스를 효율적으로 구성 가능.
Production setup
App ID
64 bytes
Event ID
16 bytes
Payload
~350 bytes
Production setup
Payload
~350 bytes
Production setup
App ID
64 bytes
Event ID
16 bytes
App ID
64 bytes
Event ID
16 bytes
App ID
64 bytes
Event ID
16 bytes
Datetime
8 bytes
Datetime
8 bytes
Datetime
8 bytes
Timezone
6 bytes
Language
2 bytes
Country
2 bytes
Production setup
Datetime
8 bytes
Datetime
8 bytes
Datetime
8 bytes
Timezone
6 bytes
Language
2 bytes
Country
2 bytes
Benchmark
•특정 기간 동안에 수집된 로그에서, 국가별
로 각 몇 회 유입되었는가를 출력.
•기존 로그 형식 vs 신규 로그 형식
•Aggregate vs MapReduce
Benchmark
unit = milliseconds MapReduce Aggregate
Old log
New log
159285 162257
40402 6752
Benchmark
unit = seconds MapReduce Aggregate
Old log
New log
159.2 162.2
40.4 6.7
Benchmark
Multiplier MapReduce Aggregate
Old log
New log
24 24
6 1
Benchmark
Multiplier MapReduce Aggregate
1 day
1 month
24 24
6 1
Benchmark
Multiplier MapReduce Aggregate
Old log
New log
720 720
6 1
Benchmark
•In-memory 상황이 아니므로, 통계를 수행
하는 과정에서 PageFault 발생.
•전체 로그가 하나의 콜렉션에 들어있는 경
우에는 PageFault도 많아질 뿐 아니라 비
교해야 하는 조건도 많아짐.
•이러한 상황에서는 인덱스에 따른 성능 향
상이 거의 없음.
Namespace problem
•MongoDB는 콜렉션 정보 저장을 위해
namespace 를 이용.
•namespace의 기본 크기는 16MB,
약 28,000개의 콜렉션과 인덱스 정보 저장.
•콜렉션이 많아져 결국 초과하는 문제 발생.
Namespace problem
Namespace problem
•nssize 값 변경으로 조정 가능.
•이미 생성된 데이터베이스는
repairDatabase 수행을 필요.
•콜렉션과 인덱스를 많이 사용할 것으로 예
상되면 nssize 를 미리 늘려놓는 것이 중요.
•용량만 늘어날 뿐, 성능에는 영향 없음.
Episode 6
MongoDB
Strikes BacK
남은 이야기
Push messages
•MongoDB 로 로그만 쌓는 것은 아님.
•Push token / Registration ID 보관을
위한 서비스용 데이터베이스로도 활용.
Reinventing the wheel
•2010년에는 적절한 푸시 메세지 관련 솔루
션이나 서비스가 없었다 / 찾질 못했다.
•일단 EasyAPNS 을 사용하고, 가내수공업
으로 밑도 끝도 없이 뜯어 고치기 시작.
Storing tokens
•http://www.easyapns.com/
•PHP + MySQL
•당장 iOS 제품에 간단히 적용 가능.
Storing tokens
•http://www.easyapns.com/
•PHP + MySQL
•당장 iOS 제품에 간단히 적용 가능.
It works!
Storing tokens
•EasyAPNS 기본 상태로는,
•토큰 및 기타 정보 변경시 오버헤드.
•서버와 커넥션을 매번 생성하는 문제.
•안드로이드(C2DM, GCM)에 대응은
어떻게 하지?
Storing tokens
•그래서,
•MyISAM 에서 InnoDB 로 변경.
•한 프로세스 내에서는 커넥션 풀 사용.
•C2DM, GCM 의 Registration ID 를
받아 처리할 수 있도록 수정.
Storing tokens
•수집한 토큰이 2천만 건이 넘어가니,
•아무리 고쳐도 INSERT ON DUPLICATE
KEY UPDATE ... 구문 최적화가 난제.
•MongoDB 에도 Unique Index 와
Upsert 가 있으니까 시도해볼까?
Storing tokens
•토큰 업데이트 요청을 받으면 일단 Redis
에 보관하고,
•주기적으로 MongoDB 에 Upsert.
Storing tokens
•토큰 업데이트 요청을 받으면 일단 Redis
에 보관하고,
•주기적으로 MongoDB 에 Upsert.
It works!
Storing tokens
•특정 시간에 예약해서 단체 발송하는 경우
에, 동시에 사용자가 몰려 들어오는 특성이
있어 Redis 를 버퍼로 사용.
•2천 5백만개 가량의 토큰을 관리하는데 약
30GB 사용.
•국가, 언어, 타임존 등 필요 정보 포함.
New hardware
16GB x 8
Reinventing the wheel
•2013년 5월 기준 3백 만원 정도의 장비로,
•1억 건 정도의 토큰 관리가 가능하며,
•월 3천만건 이상의 메세지를 보내는 중.
•Urban Airship 기준으로 약 $30,000.
The MongoDB Strikes Back / MongoDB 의 역습
Wrap-up
•MongoDB 1.6 에서 현재의 2.4 까지,
•동시성 문제가 많이 해결됨.
•요구에 따른 다양한 구성 가능.
•보다 빠르고 쉽게 데이터 분석 가능.
Wrap-up
•MongoDB의 성능 향상을 위해서는,
•충분한 메모리와 SSD 사용은 당연.
•PageFault 를 최소화 할 수 있는 설계.
•상황에 맞는 스키마 설계와 적합한 통계
명령어 사용.

Contenu connexe

Tendances

CloudSearchによる全文検索 - CM:道 2014/08/01
CloudSearchによる全文検索 - CM:道 2014/08/01 CloudSearchによる全文検索 - CM:道 2014/08/01
CloudSearchによる全文検索 - CM:道 2014/08/01 Shuji Watanabe
 
ざっくり DDD 入門!!
ざっくり DDD 入門!!ざっくり DDD 入門!!
ざっくり DDD 入門!!Yukei Wachi
 
1.mysql disk io 모니터링 및 분석사례
1.mysql disk io 모니터링 및 분석사례1.mysql disk io 모니터링 및 분석사례
1.mysql disk io 모니터링 및 분석사례I Goo Lee
 
MongoDBのアレをアレする
MongoDBのアレをアレするMongoDBのアレをアレする
MongoDBのアレをアレするAkihiro Kuwano
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance TuningJi-Woong Choi
 
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)NTT DATA Technology & Innovation
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례NAVER LABS
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本yoyamasaki
 
d.ts 만들기
d.ts 만들기d.ts 만들기
d.ts 만들기DaeSeon Jeong
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門Akihiro Kuwano
 
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~Shinji Takao
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용I Goo Lee
 
ブロケード FC ファブリックスイッチ オペレーション講座(後編)
ブロケード FC  ファブリックスイッチ オペレーション講座(後編)ブロケード FC  ファブリックスイッチ オペレーション講座(後編)
ブロケード FC ファブリックスイッチ オペレーション講座(後編)Brocade
 
ACI3.0(1k) Release
ACI3.0(1k) ReleaseACI3.0(1k) Release
ACI3.0(1k) ReleaseTakao Setaka
 
AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。
AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。
AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。Takehiro Suemitsu
 
Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계Wangeun Lee
 
2. 型態、變數與運算子
2. 型態、變數與運算子2. 型態、變數與運算子
2. 型態、變數與運算子Justin Lin
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方Takahiro YAMADA
 

Tendances (20)

CloudSearchによる全文検索 - CM:道 2014/08/01
CloudSearchによる全文検索 - CM:道 2014/08/01 CloudSearchによる全文検索 - CM:道 2014/08/01
CloudSearchによる全文検索 - CM:道 2014/08/01
 
ざっくり DDD 入門!!
ざっくり DDD 入門!!ざっくり DDD 入門!!
ざっくり DDD 入門!!
 
ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介
 
1.mysql disk io 모니터링 및 분석사례
1.mysql disk io 모니터링 및 분석사례1.mysql disk io 모니터링 및 분석사례
1.mysql disk io 모니터링 및 분석사례
 
MongoDBのアレをアレする
MongoDBのアレをアレするMongoDBのアレをアレする
MongoDBのアレをアレする
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning
 
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本
 
d.ts 만들기
d.ts 만들기d.ts 만들기
d.ts 만들기
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
 
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
 
Mongo db 최범균
Mongo db 최범균Mongo db 최범균
Mongo db 최범균
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용
 
ブロケード FC ファブリックスイッチ オペレーション講座(後編)
ブロケード FC  ファブリックスイッチ オペレーション講座(後編)ブロケード FC  ファブリックスイッチ オペレーション講座(後編)
ブロケード FC ファブリックスイッチ オペレーション講座(後編)
 
ACI3.0(1k) Release
ACI3.0(1k) ReleaseACI3.0(1k) Release
ACI3.0(1k) Release
 
AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。
AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。
AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。
 
Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계
 
2. 型態、變數與運算子
2. 型態、變數與運算子2. 型態、變數與運算子
2. 型態、變數與運算子
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方
 

Similaire à The MongoDB Strikes Back / MongoDB 의 역습

[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습smartstudy_official
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석Daeyong Shin
 
Mongo db 2.x to 3.x
Mongo db 2.x to 3.xMongo db 2.x to 3.x
Mongo db 2.x to 3.xInBum Kim
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영NAVER D2
 
Crawling with AWS Lambda
Crawling with AWS LambdaCrawling with AWS Lambda
Crawling with AWS LambdaSeungho Kim
 
모바일 Rpg 게임서버 제작
모바일 Rpg 게임서버 제작모바일 Rpg 게임서버 제작
모바일 Rpg 게임서버 제작기환 천
 
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석smartstudy_official
 
웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화NAVER D2
 
Bottled water 요약 설명 20151114
Bottled water 요약 설명 20151114Bottled water 요약 설명 20151114
Bottled water 요약 설명 20151114Daeyong Shin
 
Mongo db intro & tips
Mongo db intro & tipsMongo db intro & tips
Mongo db intro & tipsInBum Kim
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드cranbe95
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법YoungSu Son
 
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)InBum Kim
 
대용량 로그분석 Bigquery로 간단히 사용하기 20160930
대용량 로그분석 Bigquery로 간단히 사용하기 20160930대용량 로그분석 Bigquery로 간단히 사용하기 20160930
대용량 로그분석 Bigquery로 간단히 사용하기 20160930Jaikwang Lee
 
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례Jeongsang Baek
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxNeoClova
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준NAVER D2
 
MySQL InnoDB Cluster 소개
MySQL InnoDB Cluster 소개MySQL InnoDB Cluster 소개
MySQL InnoDB Cluster 소개rockplace
 

Similaire à The MongoDB Strikes Back / MongoDB 의 역습 (20)

[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석
 
Mongo db 2.x to 3.x
Mongo db 2.x to 3.xMongo db 2.x to 3.x
Mongo db 2.x to 3.x
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
 
Crawling with AWS Lambda
Crawling with AWS LambdaCrawling with AWS Lambda
Crawling with AWS Lambda
 
모바일 Rpg 게임서버 제작
모바일 Rpg 게임서버 제작모바일 Rpg 게임서버 제작
모바일 Rpg 게임서버 제작
 
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
 
웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화
 
Bottled water 요약 설명 20151114
Bottled water 요약 설명 20151114Bottled water 요약 설명 20151114
Bottled water 요약 설명 20151114
 
Mongo db intro & tips
Mongo db intro & tipsMongo db intro & tips
Mongo db intro & tips
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
 
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)
 
대용량 로그분석 Bigquery로 간단히 사용하기 20160930
대용량 로그분석 Bigquery로 간단히 사용하기 20160930대용량 로그분석 Bigquery로 간단히 사용하기 20160930
대용량 로그분석 Bigquery로 간단히 사용하기 20160930
 
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptx
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준
 
MySQL InnoDB Cluster 소개
MySQL InnoDB Cluster 소개MySQL InnoDB Cluster 소개
MySQL InnoDB Cluster 소개
 

Plus de Hyun-woo Park

2019년에 기술 문서를 번역하는 기분
2019년에 기술 문서를 번역하는 기분2019년에 기술 문서를 번역하는 기분
2019년에 기술 문서를 번역하는 기분Hyun-woo Park
 
파이콘 한국 2017 키노트 : Back to the Basic
파이콘 한국 2017 키노트 : Back to the Basic파이콘 한국 2017 키노트 : Back to the Basic
파이콘 한국 2017 키노트 : Back to the BasicHyun-woo Park
 
그런데 스타트업이 뭐더라
그런데 스타트업이 뭐더라그런데 스타트업이 뭐더라
그런데 스타트업이 뭐더라Hyun-woo Park
 
2016년 10월 파이썬 사용자 모임 오프닝
2016년 10월 파이썬 사용자 모임 오프닝2016년 10월 파이썬 사용자 모임 오프닝
2016년 10월 파이썬 사용자 모임 오프닝Hyun-woo Park
 
Tox, Travis 그리고 Codecov 로 오픈소스 생태계에 기여하기
Tox, Travis 그리고 Codecov 로 오픈소스 생태계에 기여하기Tox, Travis 그리고 Codecov 로 오픈소스 생태계에 기여하기
Tox, Travis 그리고 Codecov 로 오픈소스 생태계에 기여하기Hyun-woo Park
 
파이썬 삼총사 : Tox, Travis 그리고 Coveralls
파이썬 삼총사 : Tox, Travis 그리고 Coveralls파이썬 삼총사 : Tox, Travis 그리고 Coveralls
파이썬 삼총사 : Tox, Travis 그리고 CoverallsHyun-woo Park
 
WE HAVE ALMOST NOTHING, SMARTSTUDY
WE HAVE ALMOST NOTHING, SMARTSTUDYWE HAVE ALMOST NOTHING, SMARTSTUDY
WE HAVE ALMOST NOTHING, SMARTSTUDYHyun-woo Park
 
Django in Production
Django in ProductionDjango in Production
Django in ProductionHyun-woo Park
 
파이콘 한국 2015 디자인 후기
파이콘 한국 2015 디자인 후기파이콘 한국 2015 디자인 후기
파이콘 한국 2015 디자인 후기Hyun-woo Park
 
Dive into OpenSource
Dive into OpenSourceDive into OpenSource
Dive into OpenSourceHyun-woo Park
 
그릇된 팬심의 어긋난 결말
그릇된 팬심의 어긋난 결말그릇된 팬심의 어긋난 결말
그릇된 팬심의 어긋난 결말Hyun-woo Park
 
스타트업에서 기술책임자로 살아가기
스타트업에서 기술책임자로 살아가기스타트업에서 기술책임자로 살아가기
스타트업에서 기술책임자로 살아가기Hyun-woo Park
 
Using CloudFront and S3 at SMARTSTUDY
Using CloudFront and S3 at SMARTSTUDYUsing CloudFront and S3 at SMARTSTUDY
Using CloudFront and S3 at SMARTSTUDYHyun-woo Park
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)Hyun-woo Park
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYWHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYHyun-woo Park
 
Using AWS CloudFront with S3 at SMARTSTUDY
Using AWS CloudFront with S3 at SMARTSTUDYUsing AWS CloudFront with S3 at SMARTSTUDY
Using AWS CloudFront with S3 at SMARTSTUDYHyun-woo Park
 
Do not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDYDo not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDYHyun-woo Park
 
넝쿨째 굴러온 김성모
넝쿨째 굴러온 김성모넝쿨째 굴러온 김성모
넝쿨째 굴러온 김성모Hyun-woo Park
 
SMARTSTUDY Django 오픈 세션 2012-08
SMARTSTUDY Django 오픈 세션 2012-08SMARTSTUDY Django 오픈 세션 2012-08
SMARTSTUDY Django 오픈 세션 2012-08Hyun-woo Park
 

Plus de Hyun-woo Park (19)

2019년에 기술 문서를 번역하는 기분
2019년에 기술 문서를 번역하는 기분2019년에 기술 문서를 번역하는 기분
2019년에 기술 문서를 번역하는 기분
 
파이콘 한국 2017 키노트 : Back to the Basic
파이콘 한국 2017 키노트 : Back to the Basic파이콘 한국 2017 키노트 : Back to the Basic
파이콘 한국 2017 키노트 : Back to the Basic
 
그런데 스타트업이 뭐더라
그런데 스타트업이 뭐더라그런데 스타트업이 뭐더라
그런데 스타트업이 뭐더라
 
2016년 10월 파이썬 사용자 모임 오프닝
2016년 10월 파이썬 사용자 모임 오프닝2016년 10월 파이썬 사용자 모임 오프닝
2016년 10월 파이썬 사용자 모임 오프닝
 
Tox, Travis 그리고 Codecov 로 오픈소스 생태계에 기여하기
Tox, Travis 그리고 Codecov 로 오픈소스 생태계에 기여하기Tox, Travis 그리고 Codecov 로 오픈소스 생태계에 기여하기
Tox, Travis 그리고 Codecov 로 오픈소스 생태계에 기여하기
 
파이썬 삼총사 : Tox, Travis 그리고 Coveralls
파이썬 삼총사 : Tox, Travis 그리고 Coveralls파이썬 삼총사 : Tox, Travis 그리고 Coveralls
파이썬 삼총사 : Tox, Travis 그리고 Coveralls
 
WE HAVE ALMOST NOTHING, SMARTSTUDY
WE HAVE ALMOST NOTHING, SMARTSTUDYWE HAVE ALMOST NOTHING, SMARTSTUDY
WE HAVE ALMOST NOTHING, SMARTSTUDY
 
Django in Production
Django in ProductionDjango in Production
Django in Production
 
파이콘 한국 2015 디자인 후기
파이콘 한국 2015 디자인 후기파이콘 한국 2015 디자인 후기
파이콘 한국 2015 디자인 후기
 
Dive into OpenSource
Dive into OpenSourceDive into OpenSource
Dive into OpenSource
 
그릇된 팬심의 어긋난 결말
그릇된 팬심의 어긋난 결말그릇된 팬심의 어긋난 결말
그릇된 팬심의 어긋난 결말
 
스타트업에서 기술책임자로 살아가기
스타트업에서 기술책임자로 살아가기스타트업에서 기술책임자로 살아가기
스타트업에서 기술책임자로 살아가기
 
Using CloudFront and S3 at SMARTSTUDY
Using CloudFront and S3 at SMARTSTUDYUsing CloudFront and S3 at SMARTSTUDY
Using CloudFront and S3 at SMARTSTUDY
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYWHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
 
Using AWS CloudFront with S3 at SMARTSTUDY
Using AWS CloudFront with S3 at SMARTSTUDYUsing AWS CloudFront with S3 at SMARTSTUDY
Using AWS CloudFront with S3 at SMARTSTUDY
 
Do not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDYDo not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDY
 
넝쿨째 굴러온 김성모
넝쿨째 굴러온 김성모넝쿨째 굴러온 김성모
넝쿨째 굴러온 김성모
 
SMARTSTUDY Django 오픈 세션 2012-08
SMARTSTUDY Django 오픈 세션 2012-08SMARTSTUDY Django 오픈 세션 2012-08
SMARTSTUDY Django 오픈 세션 2012-08
 

The MongoDB Strikes Back / MongoDB 의 역습