4. 한 마디로 말해보기
Hulahoop는
Cloud Database Service 이다
5/44
5. Cloud Database Service Taxanomy
• Cloud Database Service 분류
Virtual Machine Database
Deployment as a Service
Oracle Amazon RDS
SQL MySQL Microsoft Azure
PostgreSQL Heroku
CouchDB (EC2) Amazon DynamoDB
NoSQL Hadoop(EC2) Amazon SimpleDB
Cassandra(EC2) Google AppEngine Datastore
6/44
6. Deployment Model
Virtual Machine Database
Deployment as a Service
설치 & 운영 사용 요금 지불
7/44
7. Data Model
SQL NoSQL
표준 비표준
복잡한 모델 간단한 모델
SELECT [name]
Set( key, value )
FROM [H3_ATTENDEES]
Get( key )
WHERE
[current_session] = Delete( key )
‘Hulahoop’
8/44
8. Hulahoop를 분류해보면,
Virtual Machine Database
Deployment as a Service
SQL MySQL Heroku
NoSQL Cassandra(EC2) DynamoDB, Hulahoop
9/44
10. 결론 먼저,
1. Cloud Database Service가 되기 위해서
만들어진 것이 아닙니다.
2. 분산파일시스템을 위해서 태어났습니다.
11/44
11. 분산파일시스템 구조
분산파일시스템 구조
Data
Node
#1
Data
Node
#2
Master
Node
Data
Node
#3
1,3,4
2,3,4 Data
Node
#4
12/44
12. 이런 구조의 단점은,
구조적 한계
Data
• SPOF Node
#1
• Scalability
Data
Node
#2
Master
Node
Data
Node
#3
1,3,4
2,3,4 Data
Node
#4
13/44
13. PrismFS v1.0
PrismFS v1.0
Data
• Multi Master Node
#1
• Cassandra
Data
Node
#2
Storage
Storage Master
Cassandra Data
Node
Node
#3
확장성 + 가용성 Data
Node
#4
14/44
14. Cassandra를 선택한 것은,
v0.6
고가용성 ★ 고가용성 ★★★
수평적 확장성 ★ 수평적 확장성 ★★★
적용사례 ★★★ 적용사례 ★
데이터 모델 ★★★ 데이터 모델 ★
15/44
15. Cassandra 적용 이슈 1. NoSQL 데이터 모델
Data Model
• De-normalization
Table( c1, … , cn )
( key, value )
• Data Marshalling
Marshalled Data
Slice Slice
Key File Meta
Meta
...
Meta
16/44
16. Cassandra 적용 이슈 2. Update pattern
Update Pattern
UPDATE [Meta] SET [version] = [version] + 1
WHERE [key]=‘key’
BLOB = get( key )
meta = UnMarsh( BLOB )
Get & set meta.version += 1
BLOB_v2 = Marsh( meta )
Set( key, BLOB_v2 )
17/44
17. Cassandra 적용 이슈3 . Concurrent update
Concurrent Update
Slice Slice
...
Meta Meta
Node A Node B
get & set get & set
Slice Slice Slice Slice
... ...
Meta’ Meta Meta Meta”
• Locking ( Local / Global )
18/44
18. Cassandra 적용 이슈4 . Timestamp ordering
Timestamp Ordering
100 110 120
Node A
20 40 50
Node B
Logical Clock
100+α 110+α 120+α
100 > 50
< 120+α
19/44
19. PrismFS v1.0에서 얻은 경험은,
PrismFS에서 필요한
데이터모델
데이터모델의 차이를 극복하려면,
• 구현 복잡도 증가.
• 메타데이타 저장소의 성능 활용 못함.
20/44
20. 새로운 메타 데이터 저장소
PrismFS v2.0을 위한 새로운 메타 저장소
• 고가용성
• 수평적 확장성
• 분산파일시스템에 적합한 데이터 모델
• 부분적인 ACID
Hulahoop
21/44
23. Data Model
데이터 모델
기본은 간단한 데이터 모델
• ( Key, Value ) = ( Domain, Data )
Domain Data
다양한 Data 처리 방법으로 기능 확장
• SQL
• Python Script
24/44
24. Data Type : SQL
Data Type : SQL
Hulahoop
SELECT * FROM MY_TABLE;
Col1 … ColN
Row1_col1 … Row1_colN
… … …
RowN_col1 … RowN_colN
25/44
25. Data Type : Python Script
Data Type : Python Script
def run( conn ): Hulahoop
c = conn.cursor()
c.execute( ‘…..’ )
return c.fetchone()
result
• Entry point.
• Server context.
26/44
26. Slot
Slot
• 데이터 처리와 저장 모듈
Database Script
Engine Processor
Data
Operation
Snapshot
Log
Background
27/44
39. Amazon DynamoDB API
Amazon DynamoDB API
• AWS APIs 사실상의 표준
• PrismFS = AWS S3
• 다수의 3rd party
tools, libraries, applications
• 풍부한 documentation
40/44