수십 대의 mysql DB를 MMM 솔루션을 이용해서 데이터를 저장한 사례. 단순한 정보이지만 양이 많은 구조이다.
Spring의 AbstractRoutingDataSource 클래스와 ThreadLocal를 이용한 코드를 사용한다.
http://blog.springsource.com/2007/01/23/dynamic-datasource-routing/
connection을 모두 맺는 것이 아니라 필요할 때마다 맺는 구조라서, 속도 이슈가 문제가 될 수 있다면, Spring의 AbstractRoutingDataSource 클래스 사용 대신 Mybatis에서 처음부터 connection을 모두 맺는 방식을 사용할 수 있다.
Spring AOP와 Mybatis의 SessionFactory와 SqlSession을 이용해서 구현해서 Mybatis mapper 를 그대로 쓰도록 해서 개발 환경과 릴리즈 환경시 코드 변화가 최소화되도록 했다. datasource를 DBCP 로 설정해서 connection을 maxActive 설정을 크게 잡았다. 이렇게 해서 SessionFactory, SqlSession 을 datasource (DBCP)를 꺼내 bottleneck이 없게, mapper를 쉽게 쓰는 구조로 사용했다.
Spring AOP와 AbstractRoutingDataSource 구현 예제
http://sidnancy.kr/archives/216#codesyntax_5
음.. 이렇게 구현하니 NOSQL 도 안 부럽다. 계속 확장성있는 구조라면 NOSQL이 낫지만, 어느 정도 정해진 스케일이라면, mysql 과 MMM-solution, java 로 multi db를 접근할 수 있을 것 같다.
실제 구현해보니. 생각보다 쓸만하다는 생각이 들었다.
AbstractRouting 설명 잘 나온 글.
https://groups.google.com/group/ksug/browse_thread/thread/f527ac148023ac3d
http://forum.springsource.org/showthread.php?104767-MyBatis-AbstractRoutingDataSource
'Architecture' 카테고리의 다른 글
증분의 힘(incremental development) - 15분짜리 배치(batch job)를 1초짜리 배치(batch job) 변경 사례 (0) | 2018.05.03 |
---|---|
보안 패스워드 변경을 위한 configuration server 개발 후기 (0) | 2017.12.06 |
Evernote 서비스 아키텍처 공유 (0) | 2011.05.31 |
Open API 공부 (0) | 2010.10.27 |
웹 서버 갯수 산출 근거 (0) | 2010.02.17 |