2012-01-03 3 views
0

특정 IP 주소가 작업을 수행 할 수있는 속도를 제한하려면 IP 주소별로 사용자 레코드를 저장해야합니다.IP 주소에 대한 레코드 저장 (DB 대체)

IP를 데이터베이스에 저장하는 것이 효과적 일지 모르지만 제한된 리소스의 작은 VPS에서 MySQL 프로세스가 너무 많은 처리 능력을 사용하게 될까봐 걱정됩니다. IP에 대한 데이터를 저장하는 다른 방법이 있습니까?

/ips/ 
/ips/127/ 
/ips/127/0 
/ips/127/0/0 
/ips/127/0/0/1.txt 

샘플 코드 :

나는 유사한 시스템을 생각

$ip_parts = explode('.', $_SERVER['REMOTE_ADDR']); 
$records = intval(file_get_contents('ips/' . implode('/', $ip_parts))); 

if($records > 50) { 
    echo 'Error - credits used.'; 
} else { 
    // Do something 
} 

을 필요한 데이터를 포함하는 1.TXT 파일로. 이 방법이 데이터베이스보다 느려지는 파일이나 폴더의 수가 문제가됩니까?

+1

VPS에 대해 걱정하지 마십시오. MySQL은 여러 번 해보았습니다. –

+0

... 또는 [SQLite] (http://php.net/manual/en/book.sqlite.php)를 사용하여 별도의 응용 프로그램을 실행하지 않아도됩니다. – DaveRandom

+0

성능 문제가있는 경우 훨씬 큰 문제가 있습니다. –

답변

2

DBMS 최적화와 관련하여 ServerFault에서 this question/answer을 확인하십시오. 특별한 이유없이 휠을 재발 명하려고합니다 (VPS에서 MySQL을 사용하지 않는 한). 그리고 MySQL에 IP 주소를 저장하는 주제에 관해서는 MySQL 용 INET_ATOI() 함수를 살펴보십시오.

0

sqlite를 사용해 보셨나요? 그것은 잘 작동해야합니다.

http://php.net/manual/en/book.sqlite.php

+1

답변은 OP의 제안 된 솔루션보다 더 나은 솔루션이 될 이유가 무엇인지 또는 그 이점이 무엇인지 설명하지 않습니다. –

3

자신의 파일 기반 데이터베이스 체계를 구축하는 것은 20 년의 경험을 가진 소프트웨어 엔지니어 목적으로 소프트웨어 빌드보다 더 나은 무엇이라고 생각하게? MySQL 데이터베이스를 사용하십시오. 실제로 파일을 저장하려는 경우 이외에는 그렇게하지 않는 경우는 거의 없습니다.

+0

MySQL이 더 좋다고 의심하지 않습니다. 단지 메모리 요구 사항이있는 별도의 프로세스가 필요하다는 것을 알고 있습니다. 자원이 부족할 때 나는 삭감 할 방법을 찾는다. – jSherz

+0

아무 것도하지 않는 프로세스는 리소스를 거의 사용하지 않습니다. MySQL이 사용하는 리소스는 성능 향상을 위해 결정할 사항입니다. 캐싱 및 색인 생성과 같은 것들이 있습니다. 쿼리를 더 효과적으로 수행하는 모든 종류의 항목. 그리고 그로 인해 더 빠른 결과를 얻는 것뿐만 아니라 IO 오버 헤드를 줄임으로써 하드 드라이브의 작업 부하를 줄일 수 있습니다. – kba

1

파일 시스템을 사용하는 것은 무료가 아니며 여러 포인트에 회색 머리카락이 생길 수 있으므로 실제로 데이터베이스를 사용하는 것보다 낫지는 회의적입니다.

말하자면, 파일이나 데이터베이스의 사용 여부에 관계없이 ip2long 및 MySQL의 해당 INET_ATON에 대해 배우고 싶을 것입니다. 특히 MySQL을 사용하게되면 숫자 키가 문자열보다 더 효율적입니다.

+0

나는 다른 게시판에서 ip2long에 대해 읽었고 아마 내가 데이터베이스 경로를 거치면 그것을 사용할 것이다. 감사. – jSherz

관련 문제