문제

내가 필요로 간단한 방법으로 여러 PHP 스크립트를 실행하여 데이터를 공유합니다.

을 만들어야 하는 DB 는 MySQL RAM 스토리지 엔진을 통해 데이터를 공유 할 것(수 있는 여러 스크립트로 연결하여 동일한 동시에 DB?)

또는 평면 파일이 하나의 데이터당 라인은 더 나은?

도움이 되었습니까?

해결책

플랫 파일? Noooooo ...

좋은 DB 엔진 (MySQL, Sqlite 등)을 사용하십시오. 그런 다음 최대 성능을 위해 MemCached To를 사용하십시오 은닉처 콘텐츠.


이러한 방식으로 동시성 등을 처리하는 입증 된 서버 소프트웨어를 사용하여 프로세스간에 데이터를 공유 할 수있는 편리함과 신뢰성이 있지만 데이터를 캐시하는 속도를 얻습니다.

몇 가지를 명심하십시오.

  1. MySQL에는 쿼리 캐시가 있습니다. 동일한 쿼리를 반복적으로 발행하는 경우 캐싱 레이어를 추가하지 않고도 많은 성능을 얻을 수 있습니다.
  2. MySQL은 어쨌든 정말 빠릅니다. 충분하지 않다는 것을 보여주기 위해로드 테스트를 받았습니까?

다른 팁

관리자의 정신을 위해 플랫 파일을 사용하지 마십시오.

가능한 한 빨리 데이터를 공유하려는 경우 RAM으로 모든 데이터를 보관할 수 있다면 memcached 완벽한 솔루션입니다.

데이터의 지속성을 원한다면 MySQL과 같은 DBMS를 사용하십시오.

일반적으로 DB가 더 좋습니다. 그러나 작은 정적 양의 데이터를 공유하는 경우 플랫 파일로 수행하는 성능 이점 (및 단순성)이있을 수 있습니다.

그러나 사소한 데이터 공유 외에는 DB를 선택할 것입니다.

1- 플랫 파일이 유용 할 수있는 경우 : 플랫 파일은 데이터베이스보다 빠를 수 있지만 매우 구체적인 응용 프로그램에서. 검색이나 쓰기없이 데이터를 처음부터 끝까지 읽으면 더 빠릅니다. 데이터가 메모리에 맞지 않고 작업을 완료하기 위해 완전히 읽어야하는 경우 데이터베이스보다 더 빠를 수 있습니다. 또한 읽기보다 더 많은 쓰기가있는 경우, 플랫 파일도 빛나고, 대부분의 기본 데이터베이스 설정은 읽기 쿼리가 인덱스와 외래 키를 유지하기 위해 쓰기가 완료 될 때까지 기다려야합니다. 쓰기 쿼리를 일반적으로 단순한 읽기보다 느리게 만드는 것은 일반적으로 느리게 만듭니다.

TD/LR VESION : 웹 검색 쿼리가 아닌 작업 기반 시스템 (일명, 간단한 로그 구문 분석)에 플랫 파일을 사용합니다.

2- 플랫 파일 PIT FALLS : 플랫 파일을 사용하는 경우 사용자 정의 잠금 메커니즘을 사용하여 파일을 변경할 때 스크립트를 동기화해야합니다. 버그가있는 경우 둔화, 손상된 잠금 장치로 이어질 수 있습니다.

3- RAM 기반 데이터베이스? 대부분의 데이터베이스에는 쿼리 결과, 검색 인덱스에 대한 메모리 캐시가있어 플랫 파일로 이길 수 없습니다. 메모리로 캐시하기 때문에 메모리에서 완전히 실행하는 것은 대부분 비효율적이고 위험합니다. 데이터베이스 구성을 올바르게 조정하는 것이 좋습니다.

RAM을 사용하여 성능을 최적화하려는 경우 먼저 RAM 드라이브에서 PHP 스크립, HTML 페이지 및 작은 이미지를 실행하는 것을 살펴 봅니다. 캐시 메커니즘이 조잡 할 가능성이 높고 변화하지 않는 정적 데이터에 대해 체계적으로 하드 드라이브에 부딪 칠 가능성이 높습니다.

RAM 기반 SAN 어레이까지 백 평면 연결로 클러스터링하는로드 밸런서를 사용하면 더 나은 결과를 도달 할 수 있습니다. 그러나 그것은 완전히 다른 주제입니다.

5- 여러 스크립트가 동시에 동일한 DB에 연결할 수 있습니까?

예, 연결 풀링이라고합니다. PHP (클라이언트 측)에서 연결을 열 수있는 기능 MySQL-PConnect (http://php.net/manual/en/function.mysql-pconnect.php). php.ini에서 최대 개방 연결을 구성 할 수 있습니다. MySQL 서버 측의 유사한 설정은 /etc/mysql/my.cnf에서 최대 동시 클라이언트 연결을 정의합니다.

CPU의 Parrallel Processing을 활용하고 PHP 스크립트를 피하기 위해 서로 쿼리를 기다리려면이 작업을 수행해야합니다. 무거운 짐으로 성능을 크게 증가시킵니다.

Apache 구성에는 일반 웹 클라이언트를위한 하나의 연결 풀/스레드 풀도 있습니다. httpd.conf를 참조하십시오.

텍스트의 벽에 대해 죄송합니다. 지루했습니다. 루이.

여러 서버에서 실행하는 경우 파일 시스템 기반 접근 방식이 절단되지 않습니다 (일관된 공유 파일 시스템이 없으면 확장 가능하지 않을 수 있습니다).

따라서 웹 서버간에 데이터를 공유 할 수 있도록 서버 기반 데이터베이스가 필요합니다. 성능 또는 가용성에 대해 진지한 경우 애플리케이션이 여러 웹 서버를 지원합니다.

내가 말할 것 MySql DB 것은 더 나은 선택이 있는 경우 이외에는 장소에서 메커니즘을격으로 자물쇠를 가진 평지에서 파일(어떤 방법에 대한 액세스를 제어).이 경우에는 DB 층(에 관계없이의 특정 DBMS)역할을 하는 간접층시키고,당신에 대해 걱정하지 않습니다.

이후 영업 이익을 지정하지 않은 웹 서버(및 PHP 실제로 실행할 수 있습에서 명령행)그때 나는 특정 캐싱 기술은 무엇인들은 후 여기에.OP 보고 할 수있는 몇 가지 종류의 비행 데이터를 변환하지 않는 웹 사이트 구동됩니다.누가 알고 있습니다.

시스템에 PHP 캐시가있는 경우 (APC와 같이 메모리에서 PHP 코드를 컴파일 한 경우) PHP 코드로 데이터를 PHP 파일에 넣으십시오. 데이터를 작성 해야하는 경우 몇 가지 보안 문제가 있습니다.

여러 실행 PHP 스크립트가 데이터를 공유 할 수있는 간단한 방법이 필요합니다.

APC, 컨텍스트에 따라 모두 좋은 옵션입니다. 공유 메모리 옵션 일 수도 있습니다.

RAM 저장 엔진으로 MySQL DB를 생성하고이를 통해 데이터를 공유해야합니까 (여러 스크립트가 동시에 동시에 동시에 연결할 수 있습니까?)

그것은 또한 괜찮은 옵션이지만 아마도 APC 나 Memcached만큼 빠르지 않을 것입니다.

아니면 라인 당 한 줄의 데이터가있는 플랫 파일이 더 좋을까요?

이것이 읽기 전용 데이터 인 경우 가능성이 있지만 위의 옵션보다 느릴 수 있습니다. 특히 데이터가 큰 경우. 그러나 사용자 정의 구문 분석 코드를 작성하는 대신 간단히 PHP 배열을 구축하고 파일을 포함시키는 것을 고려하십시오.

이것이 여러 작가가 동시에 액세스 할 수있는 데이터 스토어 인 경우, 플랫 파일을 사용하지 마십시오! 여러 프로세스에서 플랫 파일에 쓰면 파일 손상이 발생할 수 있습니다. 파일을 잠글 수 있지만 경합 문제와 긴 잠금 대기 시간을 잠금 할 위험이 있습니다.

동시 쓰기 처리는 MySQL 및 Memcached와 같은 응용 프로그램이 존재하는 이유입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top