2012-09-16 3 views
6

세션 변수를 저장하기 위해 MySQL을 사용하고 싶습니다. 내가 이해하는 바로는 이것은 모든 페이지 요청마다 하나의 읽기와 하나의 쓰기가 테이블에 있음을 의미합니다.PHP 세션 저장에 가장 적합한 MySQL 스토리지 엔진

이 작업에 가장 적합한 MySQL 스토리지 엔진은 무엇입니까? MyISAM, InnoDB, MariaDB (PHPMyAdmin에는 표시되지 않음), 메모리 또는 완전히 다른 것이 있습니까?

답변

8

은 "베스트"아무런 의미가 없습니다. 제약 조건을 표현해야합니다. 일관성이 필요합니까? 내구성? 고 가용성? 공연? 이러한 모든 속성의 조합? 세션을 풀어 볼 여유가 있습니까? 그들은 기억에 적응할 수 있습니까? 동일한 데이터에 대한 동시 액세스를 지원해야합니까?

더 이상의 컨텍스트가 없으면 가장 균형 잡힌 스토리지 엔진 인 InnoDB를 선택합니다. OLTP 응용 프로그램, ACID 트랜잭션, 양호한 안정성 및 합리적인 동시성 관리에 대해 정확한 성능을 제공합니다. 세션 변수 액세스는 기본 키를 사용하여 수행 될 가능성이 높습니다.이 작업은 InnoDB에서 매우 효율적입니다.

성능이 실제로 제약 조건이라면, 차라리 MySQL이 아닌 NoSQL 엔진을 사용하고 싶습니다. 세션 데이터를 저장하기 위해 보통 Redis은 매우 훌륭하게 작업하며 통합 및 배포하기가 쉽습니다.

의 MyISAM 가장 일반적인 (많은 공유 호스팅 패키지는 당신의 MyISAM을 사용하자)입니다 :

+0

우수 답변. –

1

메모리 저장 엔진이 가장 좋은 옵션입니다. 임시 세션에는 유용합니다.

http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

+0

엔진이 디스크에 데이터를 쓰지 않고 서버가 메모리를 공유하지 않기 때문에로드 밸런서를 사용하면 문제가되지 않습니까? 또한 서버가 다운되거나 다시 시작되면 모든 데이터가 손실됩니까? – qwertymk

0

그것은 당신이 "betterness을"평가 방법에 따라 달라집니다. 또한 관계 제어 측면에서는 다소 제한적이기 때문에 실제로 빠르고 쉽게 설정할 수 있습니다. 여러 호스팅 시나리오에서 이식성과 빠른 구현을 원한다면 MYISAM이 가장 좋습니다.

InnoDB를 사용하면 서로 다른 테이블의 키를 연결하여 관계를 만들고 SaveGuard 데이터 무결성을 만들 수 있습니다. 이는 더 많은 작업을하지만 훨씬 전문적인 db 디자인을 의미합니다. 많은 공유 호스팅 패키지는 InnoDB를 구현하지 않으므로 한 환경에서 다른 환경으로 테이블 구조를 내보낼 때 추가 작업이 필요할 수 있습니다. 당신이 현실주의 관리 및 통제를 원하면 INNODB IS BEST가 가장 좋습니다.

데이터 이식성에 관한 한, MyISAM은 데이터 무결성을 검사하지 않기 때문에 MyISAM에 의해 완전히 수용 될 것입니다. "user_car에 새 레코드를 삽입 할 때 사용자 데이터베이스에 사용자 번호 4가 있습니까? 예를 들어 "). MyISAM으로 시작한다면, 데이터가 모든 키를 가지고 있더라도, 본질적인 InnoDB 데이터베이스로 내보내기는 악몽 일 것입니다. 테이블 데이터는 올바른 순서 (user_car 이전에 사용자와 자동차)로 가져와야합니다.

MariaDB? MyISAM과 InnoDB에 비해 지원이 적을 것입니다.

하단 라인 클린 처 : INNODB.

+3

MariaDB가 절대로 안되는 이유는 무엇입니까? – qwertymk

+1

마리아를 강력하게 낙심 시키면 왜 그런지 말할 필요가 없습니다. 그렇지 않으면 그 문장은별로 유용하지 않습니다! 게시물을 수정하고 그 지점을 조금 확장 하시겠습니까? – halfer

+0

@quertymk 및 halfer하고 요청을 따르고 편집했습니다. 고맙습니다! :) –

관련 문제