FuelPHP에서 DB 수평 분할 지원

삿포로 사무실 K입니다.

기존에는 서버 시스템 (LAMP 환경)의 제작은 자사 프레임 워크의 개발이 중심 이었지만 곧 오픈 소스 프레임 워크를 사용할 수 많아지고 있습니다.

사내 프레임 워크도 나쁘지 않습니다 만, 오픈 소스 프레임 워크이고, 타사에서 운영을해야 할 경우, 혹은 반대로 개발하고 운용은 타사에 인수하면 쉽다 않을까도 생각합니다.

그래서 이번에는 소셜 게임 등의 개발에서도 널리 사용되어오고있는 것으로 알고있다 FuelPHP 대해 필요한데 관리되지 않는 DB를 Tips을 써보고 싶습니다.

※ FuelPHP 어떤 모모인가에 대해서는, 일본어 문서를 참조하십시오.

(FuelPHP 일본어 Document)http://fuelphp.jp/

 

■ 이번 제작 한 환경

이번에는 아래와 같은 환경에서 검증을 실시했습니다.

Apache 2.2.22

PHP 5.4.44

mysql 5.5.44,

FuelPHP 1.7.3

비어 있던 사내 시험 환경이라고하기도, PHP 버전이 조금 오래된이지만 FuelPHP 대응 해주고 있습니다.

덧붙여서, FuelPHP의 최신 릴리스 버전은 1.8에서 PHP7에도 대응하고 있습니다!

그쪽보고도 중 업하고 싶다고 생각합니다.

 

Tips!

■ DB 테이블의 수평 분할 지원

데이터베이스 테이블의 수평 분할 대응은 소셜 게임에서의 부하 분산으로 효과적인 방법입니다.

하지만, FuelPHP 대응의 수평 분할은 의외로 정보가없고, 손으로 더듬어 만들게되었습니다.

FuelPHP는 DB 자체를 마스터, 슬레이브에 새기는 기능은 있지만, 테이블을 수평 분산시킨 경우의 처리는 고려되지 않고, 좋은 샘플을 찾을 수 없습니다.

 

그래서 기존 ORM의 model을 확장 한 model을 만들고 여기에 조건에 따라 테이블의 선택을 실시하기로했습니다.

각 처리 및 하위 모델 클래스에서는이 확장 model을 상속시켜 사용합니다. (이것은 보통 단계 네요 ..)

 

이 구조는 다음과 같은 일을했습니다.

· connection 클래스를 재정의 한 connenction를 작성,

그 중 분할 규칙에 따라 테이블 선택한다.

· 분할 된 테이블에 분할하지 않도록 상속 용 클래스를 제공하고

분할 설정을한다.

· 개별 테이블 용 클래스가 위의 상속에 대한 클래스를 상속하여 다양한한다.

 

쓰면 조금 복잡하다 느낄 수 있지만 대체로 다음과 같은 구조입니다.

fig001

예를 들어 find하면 실제로 안에 Query :: forge에서 자동 클래스를 new하는 구조로되어 있기 때문에, 이것된다는 것입니다.

Scaffold 등으로 클래스를 자동 생성 한 경우 다시 작성해야합니다.

 

당사에서는 분산시킨 행선지를 가진 테이블을 준비하고, 거기에서 사용자별로 취득한 테이블 (_0 등)에 액세스하는 형식을 취하고 있습니다. 이 근처는 설계대로 부분이라고 생각합니다.

 

■ 비틀 수

FuelPHP 설정 파일 config는 core에서 복사 해오고 다시 작성하면 덮어 쓴다고 것이 채용된다는 설명했지만 ,,,

Development 이외의 환경에서는 core 부하의 config가 살아 버린다는 것을 알게되었습니다.

따라서 이번 복사 한 설정 파일에서 mysqli에서 설정을하고있었습니다 만, 환경 production 변경하자마자 오류에! !

살펴보면, core의 config의 기본이 pdo되어 있었기 때문에 오류가있었습니다.

 

이 근처 FuelPHP는 core 자체를 고쳐 쓰는 것이 종종있었습니다 때문에 조심할 필요가있을 것입니다.

 

■ 감상

FuelPHP는 사용하기 쉽고 묶어도 풀어 프레임 워크라고 생각했는데 그만큼 어느 정도 읽기 능력도 필요하므로 잘 정의하여 사용하고가는 것이 좋다고 생각했습니다.

앞으로도 FuelPHP뿐만 아니라 여러 가지에 접해 가고 싶습니다.