2012-01-30 1 views
0

순수한 성능 관점에서 간단한 데이터 (미리 정의 된 메시지)를 저장하는 것이 더 낫다고 말합니다. 파일 핸들을 열고 json_decode "Subject"와 "body"를 열고 파일을 닫거나 데이터베이스를 쿼리하는 작업이 더 많을 것이라고 생각하십니까 (SELECT subject, body FROM predefine WHERE id = 'message1'id는 기본 키라고 가정) . 5 ~ 10 개의 미리 정의 된 메시지 만 갖지만 수백 명의 사용자가이 응용 프로그램을 동시에 사용하고 있다고 가정하고 싶습니다.매우 간단한 데이터의 경우 플랫 파일과 MySQL의 비교

+2

몇 백명의 사용자는 중요하지 않습니다. 만약 내가 다른 것들에 대해서도 DB에 메시지를 넣을 수있는 db를 사용했다 – Daniel

답변

3

메시지가 미리 정의되어 있고 읽기 전용 인 경우 PHP 소스 파일에 (상수로) 하드 코딩하면됩니다.

변경된 경우 데이터베이스에서 동시성 문제를 처리하도록하십시오. 기본 키로 행을 읽는 것은 매우 빠릅니다. 특히 테이블에 행이 10 개 밖에없는 경우 특히 그렇습니다. 앱이 성능 문제를 일으키는 곳이 아닐 것입니다.

1

5-10 메시지의 경우 플랫 파일이 훨씬 효율적입니다. MySQL은 별도의 프로세스이므로 간단한 프로세스 간 통신은 작은 파일을 구문 분석 한 다음 더 많은 CPU로드를 발생시킵니다. 100 개의 메시지가 나오면 간단히 색인 된 파일처럼 더 복잡한 시스템에 대해서 생각해보기 시작할 것입니다. 심지어 SQL은 과도한 공격이다. 10000 또는 100000 메시지가있을 때만 데이터베이스의 이점을 볼 수 있습니다.

0

Daniel이 말했듯이 이미 DB를 사용하고 있다면 거기에 던져 넣으십시오. 응용 프로그램이 데몬 프로세스 인 경우 다시 시작할 때 DB에서로드하고 메모리에 캐시하면 최상의 성능이 보장됩니다.

+0

오른쪽. 하지만 웹 서버 (아파치 어쩌면)에서 실행 중이며 캐시 할 수 있습니다. 예를 들어 Django라면 캐시 백엔드 중 하나를 사용할 것입니다. – Sid

4

작은 파일의 경우 플랫 파일 읽기가 매우 빠릅니다. 특정 데이터를 찾으려고 할 때 데이터베이스의 성능상의 이점이 있습니다. 특정 파일 (예 : 파일 이름 : msg_1.txt, msg_2.txt 등)을 잡는 중일 때는 flatfile 시스템을 사용하는 것이 좋습니다.

JB Nizet이 지적한 것처럼 몇 가지 메시지 만 처리한다면 ... 상수를 사용하거나 PHP 파일에 배열을 만들면 include_once() 필요할 때 편집 할 수 있습니다 정의 :

$msg = array(
    'msg1'=>array('sub'=>"subject",'body'=>"body Text"), 
    'msg2'=>array('sub'=>"subject 2",'body'=>"body Text 2"), 
    //...etc. 
); 
+0

미리 정의 된 것은 관리자가 편집 할 때 편집 할 수 있지만 반드시 그렇지는 않습니다. 그들은 효과적으로 읽기 전용입니다. MySQL이 하루 종일 서버를 중단시키고 필요하지 않을 때 CPU 사용량을 줄이는 것에 대해 걱정하고 있습니다. – user974896

+1

인덱스가 있고 간단한 테이블을 사용하는 간단한 mysql 쿼리의 경우 쿼리 시간을 초당 10,000 분의 1 초 미만으로 처리 할 것이므로 어떤 벽을 치게 될지 의심 스럽다. (서버가 연결을 해제해야한다. 수백 명의 동시 사용자가 문제가되지 않아야 함). 실시간 연결 끊김 현상은 연결을 만들고 끊을 것이므로 영구 연결을 조사해야합니다. 그러나, 당신의 상황 (당신은 항상 하나의 키, 즉 id 나 파일명을 통해 접근한다는 것을 알고있다.) 나는 일반적으로 플랫 파일이나 미리 정의 된 배열을 사용한다. –