최근에 모통신사의 쇼핑몰의 데이터가 넘쳐나 DBA를 찾고 있었습니다. DBA의 튜닝은 Table파티셔닝, index, 쿼리 튜닝이 주로 이루 질것으로 보였습니다. 그러나 요즘 같은 경우는 DBA를 개발자들이 동시에 하는 경우가 많습니다. 그래서 저는 이런 DB 튜닝 요구 사항이 있을 때 데이터의 성격을 파악하고서 Cache(local cache or distributed cache)기술을 사용하는 것이 좋다고 생각합니다. 그렇지만 그 동안의 제 상사들의 생각은 테이블 구조 변경에 고민을 많이 하는 사람들이 많았습니다. 이런 건 시간이 많이 필요한 작업이죠. 이 때 IBatis의 CacheModel을 사용하면 성능이 2배 이상 좋아지는 것을 확인 할 수 있습니다.



IBatis : 웹 개발시에 Spring과 IBatis를 같이 사용하는데요. IBatis에서 select 하는 데이터가 빈번하게 사용되는 경우조회 시 매번DBIO를 발생시키게 됩니다어플리케이션 성능을 저하시키는 DBIO를 줄이고대신 select 한 데이터를 캐시하면 성능개선효과를 충분히 볼 수 있습니다그래서 조회 시 자주 사용하는 select문 위주로 데이터를 캐시합니다그리고 Cache 사용은 default OSCache이며 EHCache, OSCache, SwarmCache, TreeCache를 사용 할 수 있습니다.

1. Cache


Models

데이터베이스의 데이터 중에는 다른 데이터에 비해 변경이 늦는 데이터가 있습니다. 그런 데이터의 특성중에 하나는 기하 급수적으로 데이터가 증가하는 부분도 있다는 것입니다. 이 때 성능을 개선하기 위해, 많은 개발자들이 자주 데이터를 컨트롤 하기 위해서 데이터베이스를 관리하는 DBA역할에 뛰어 들게 됩니다. 사실, 불필요한 발걸음을 줄이고 시간을 줄이기 위해 캐시하는 것이 더 좋습니다. iBATIS는 <cacheModel> 를 통해 구성 자체 캐싱 시스템을 제공합니다. 쿼리의 결과가 매핑된 cacheModel 매개 변수를 지정하여 간단하게 캐싱하실 수 있습니다.

2. Read-Only vs. Read/Write


CacheModel의 Read-Only 캐쉬는 성능상에 최고의 옵션입니다. 읽기 전용 캐시를 수정하지 않습니다. 대신 새 개체는 데이터베이스에서 읽을 수 있어야 합니다. Read/Write는 Cache의 값을 변경합니다. 이런 경우는, 보통 자주 수정 변경이 되는 데이터에 사용 됩니다. 보통은 Read-Only 를 권장하여 사용하기를 추천합니다. readOnly의 기본값은 (True)로 읽기 전용입니다.
다음과 같이 캐시 모델은 cacheModel 요소를 사용하여 구성됩니다.


<cacheModel id="product-cache" implementation="FIFO" readOnly="true" serialize="false">
  <flushInterval seconds="60"/>
  <flushOnExecute  statement="getProductList "/>
  <property name="CacheSize" value="1000"/>
</cacheModel>
<Cache Model>
 
위의 캐쉬 모델은 FIFO 구현을 사용하여 캐시의 인스턴스를 생성합니다.

캐시 모델 내에 지정된 빠질때 요소에 따라,이 캐시는 60초마다 새로운 데이터로 갱신 됩니다. 

flushInterval로 인해 DB에 60초 간격으로 DBIO가 일어납니다. 

flushInterval은 hours, minutes, seconds, milliseconds등을 지정할 수 있습니다. 

캐쉬 모델이 구성되면, 아래의 매핑된 문장으로 사용할 수 있도록 캐시 모델을 지정할 수 있습니다.

<statement id="getProductList" cacheModel="product-cache">
  select * from PRODUCT where PRD_CAT_ID = #value#
</statement>
<Mapped Statement>
 

3. 저장 옵션

  • imlementation(캐시 모델이 저장되는 형태)은 다음 네 가지 중 선택

    • MEMORY - GC가 메모리에서 삭제할 때까지 캐시를 메모리에 저장해둔다.

    • FIFO - 먼저 만들어진 캐시를 먼저 삭제한다.

    • LRU - 가장 오랫동안 사용되지 않는 캐시부터 삭제한다.

    • OSCACHE - OpenSymphonyCache를 사용한다.

4. 하위 옵션

  • flushInterval
    • 특정 시간단위마다cache 를 갱신하기 위한 옵션

    • hours, minutes, seconds, milliseconds등을 지정

  • flushOnExecute

    • 지정한 statement가 실행될때cache 에 추가하는 것을 의미

    • Namespace를 사용하는 상황이라면 Namespace.statement 로 지정

  • property size




'IT노트 > iBatis' 카테고리의 다른 글

문자그대로 사용( ibatis IN $ <![CDATA[ )  (0) 2015.03.06
IN 사용 방법 중 하나  (0) 2015.02.25
ibatis JSON 연동  (0) 2015.02.24
IN 사용 방법 중 하나  (0) 2015.02.02
[iBatis] like문, escape문자, <![CDATA[ ]]>  (0) 2015.02.02
Posted by wychoi
,