2011-03-08 2 views
1

현재 Google 웹 사이트에서 검색 기능을 최적화하려고합니다. 우리는 우리의 ORM으로 doctrine을 사용하고 있으며 모든 테이블은 현재 InnoDB입니다. 아래는 우리 테이블 구조의 대략적인 개요입니다.Myctam과 InnoDB 테이블을 Doctrine과 함께 사용하기

Table: Person 
Columns: 
    personId 
    firstName 
    middleName 
    lastName 

Table: Obituary 
    obitId 
    content <--- LONG TEXT 
    personId 

사람과 사망 기사의 관계가 1 : 1입니다.

현재 사용자는 사람의 이름을 입력 할 수 있으며, 우리 사이트는 사망 표의 내용뿐만 아니라 사람 표 (이름, 성, 중간 이름 등)에 검색 텍스트의 출현을 검색합니다.

이제 사망 기사 테이블의 내용 열이 긴 텍스트이기 때문에이 검색 속도가 느립니다. 이것을 InnoDB에서 MyISAM으로 전환하면 성능이 크게 향상됩니다. 현재 Person의 모든 변경 사항은 Obituary에도 적용됩니다. 현재 모든 업데이트는 한 시간 단위로 이루어 지므로 검색은 검색만큼이나 흔하지 않습니다.

나의 질문은 MyISAM으로 Obitary 테이블을 전환하면 사람 레코드를 저장하고 업데이트 할 때 Doctrine에 부정적인 영향을 미칩니 까?

답변

3

Doctrine notice? 아마도 그렇지 않습니다.

문제가 발생합니까? 일이 잘못 될 때만. MyISAM은 트랜잭션 스토리지 엔진이 아닙니다. 트랜잭션 내부에서 MyISAM 테이블을 변경 한 다음 변경 사항을 롤백해야하는 경우에는 해당 테이블에서 롤백되지 않습니다. 무섭게 깨기 시작한 지 꽤 오래되었지만, MySQL이 경고 메시지를 내기조차하지 않으려합니다. 이렇게하면 데이터 일관성 문제가 발생할 수 있습니다.

서버를 제어하는 ​​경우 ElasticSearch (응용 프로그램 수준에서 통합) 또는 Sphinx (MySQL 수준에서 통합)과 같은 외부 검색 소프트웨어를 데이터베이스에서 제거하는 것이 중요합니다.

+0

감사합니다. 이것은 내가 생각한 것입니다. 그러나 MyISAM으로 테이블을 변경하는 대신 보너스를 찾고 있습니다. 무리 감사! – Zoidberg