dynamodb 삽질기

64
Dynamodb 삽질기 김승연(Acuros) / 최보철(Teddy)

Upload: aws-korea-ug

Post on 22-Jul-2015

434 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: Dynamodb 삽질기

Dynamodb 삽질기김승연(Acuros) / 최보철(Teddy)

Page 2: Dynamodb 삽질기

Dynamodb 매우 삽질기김승연(Acuros) / 최보철(Teddy)

Page 3: Dynamodb 삽질기

서브 프로젝트

Page 4: Dynamodb 삽질기

•Nginx

•CPython 2.7

•uwsgi

•django

•mysql

Page 5: Dynamodb 삽질기

•Nginx

•Pypy

•Gunicorn + eventlet

•Flask

•Dynamodb

Page 6: Dynamodb 삽질기

Dynamodb

Page 7: Dynamodb 삽질기

•NoSQL

•유연한 throughput

•설치 필요 없음

Page 8: Dynamodb 삽질기

• Mongodb 16mb > Dynamodb 400kb

• Index를 바꿀 수 없음

• Boto를 못만들었음

Page 9: Dynamodb 삽질기

시작부터 난관

Page 10: Dynamodb 삽질기

로컬에서 어떻게 테스트하지?

Page 11: Dynamodb 삽질기

Sqlite + HTTP Server(http://aws.amazon.com/ko/blogs/aws/dynamodb-local-for-desktop-development/ 2013.09.12)

Page 12: Dynamodb 삽질기

로컬에 연결은 어떻게 하지?

Page 13: Dynamodb 삽질기

boto

Page 14: Dynamodb 삽질기

망할 boto

Page 15: Dynamodb 삽질기
Page 16: Dynamodb 삽질기
Page 17: Dynamodb 삽질기

boto.dynamodbboto.dynamodb2

Page 18: Dynamodb 삽질기
Page 19: Dynamodb 삽질기

???Connection은 ???

Page 20: Dynamodb 삽질기
Page 21: Dynamodb 삽질기

Boto config

Page 22: Dynamodb 삽질기
Page 23: Dynamodb 삽질기

Region만 입력할 수 있다

Page 24: Dynamodb 삽질기

1. Hosts 수정

2. boto.endpoints_path 수정

3. AWS real server에 테스트하기

4. 그만두기

Page 25: Dynamodb 삽질기

1. Hosts 수정

2. boto.endpoints_path 수정

3. AWS real server에 테스트하기

4. 그만두기

Page 26: Dynamodb 삽질기

포트는?

Page 27: Dynamodb 삽질기

1. 테스트 DB 서버를 sudo로

2. Iptables로 port redirection

3. 다른 방법 찾아보기

4. 그만두기

Page 28: Dynamodb 삽질기

1. 테스트 DB 서버를 sudo로

2. Iptables로 port redirection

3. 다른 방법 찾아보기

4. 그만두기

Page 29: Dynamodb 삽질기

boto

Page 30: Dynamodb 삽질기

망할 boto

Page 31: Dynamodb 삽질기

Table(table_name, schema=None, throughput=None, indexes=None, global_indexes=None, connection=None)

Optionally accepts a connection parameter, which should be a DynamoDBConnection instance (or subclass). This is primarily useful for specifying alternate connection parameters.

Page 32: Dynamodb 삽질기

Table('User', connection)

Page 33: Dynamodb 삽질기

이게 뭐야

Page 34: Dynamodb 삽질기

1. 매번 Table(name, connection)

2. Monkey patching

3. 그만두기

Page 35: Dynamodb 삽질기

1. 매번 Table(name, connection)

2. Monkey patching

3. 그만두기

Page 36: Dynamodb 삽질기

Table(table_name, schema=None, throughput=None, indexes=None, global_indexes=None, connection=None)

Optionally accepts a connection parameter, which should be a DynamoDBConnection instance (or subclass). This is primarily useful for specifying alternate connection parameters.

Page 37: Dynamodb 삽질기

DynamoDBConnection.init monkey patching

Page 38: Dynamodb 삽질기

app.config host, port, is_secure 우선순위

Page 39: Dynamodb 삽질기

39슬라이드만에테스트를 할 수 있게 되었다

Page 40: Dynamodb 삽질기

이제 본격적인 개발코드를작성해볼까

Page 41: Dynamodb 삽질기

…불편하다

Page 42: Dynamodb 삽질기

1. schemaless

• user[‘likes’] ? user[‘like’]?

• type(user[‘likes’] == list)? type(user[‘likes’] == set)?

42

Page 43: Dynamodb 삽질기

2. Document type support

43

Page 44: Dynamodb 삽질기
Page 45: Dynamodb 삽질기
Page 46: Dynamodb 삽질기

3. Complex Lookup

46

Page 47: Dynamodb 삽질기

누군가는 이것들을해결해놨을거야!

Page 48: Dynamodb 삽질기
Page 49: Dynamodb 삽질기

있다! Schema!

Page 50: Dynamodb 삽질기
Page 51: Dynamodb 삽질기

해결!

Page 52: Dynamodb 삽질기

..망할 PynamoDB

Page 53: Dynamodb 삽질기

boto와 연관없는 자체 구현

Page 54: Dynamodb 삽질기

하지만

Page 55: Dynamodb 삽질기

1. DynamoDB 명세를 모두 구현하지 않음

• Complex Lookup 기능이 존재하지 않음

• 자체구현임에도 불구하고 List, Map Type을 구현하지 않음

55

Page 56: Dynamodb 삽질기

2. 다른 Library들과 호환되지 않는 동작

56

• Set type을 문자열로 저장해서 사용

Page 57: Dynamodb 삽질기

1. Boto와 PynamoDB 같이 쓰기

2. PynamoDB를 수정해서 쓰기

3. Boto wrapping을 구현하기

4. 그만두기

Page 58: Dynamodb 삽질기

1. Boto와 PynamoDB 같이 쓰기

2. PynamoDB를 수정해서 쓰기

3. Boto wrapping을 구현하기

4. 그만두기

Page 59: Dynamodb 삽질기

BynamoDBhttps://github.com/teddychoi/BynamoDB

Page 60: Dynamodb 삽질기

1. Boto의 저수준 인터페이스 감쌈

2. 스키마 정의

3. 복잡한 조건검색 지원

4. 어느 호스트에도 쉽게 접속 가능

Page 61: Dynamodb 삽질기

61

Before

Page 62: Dynamodb 삽질기

62

After

Page 63: Dynamodb 삽질기

63

Before

After

Page 64: Dynamodb 삽질기

QNA