수십 대의 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 설명 잘 나온 글.

http://dev.anyframejava.org/docs/anyframe/plugin/optional/routingdatasource/1.0.0/reference/htmlsingle/routingdatasource.html

https://groups.google.com/group/ksug/browse_thread/thread/f527ac148023ac3d

http://forum.springsource.org/showthread.php?104767-MyBatis-AbstractRoutingDataSource

Posted by 김용환 '김용환'