2012-08-31 3 views
5

내 주요 이유는 다른 옵션에 대한 의견이 있습니다. 나는 비디오와 관련된 디렉토리에 파일/엄지 손가락을 가지고 있는데 glob() function glob (DIRECTORY./file_name*.jpg); 비디오의 모든 JPG 파일의 배열을 반환합니다.PHP - 디렉토리 읽기 대 데이터베이스에서 가져 오기

글로브 기능 자체가 매우 빠르지 만 각 페이지마다 20 ~ 50 개의 비디오가있을 수 있으므로 20 ~ 50 개의 글로브 호출이 있으므로 사용을 염려합니다. 계속 사용하거나 데이터베이스에 데이터를 넣어야합니다. 거기에서 glob() 대신 파일 목록을 가져 오십시오; ?

더 나은 대안이 있다면 알려 주시기 바랍니다.

감사합니다.

+0

온라인으로 50 명이 넘는 사용자가 온라인에 있다는 것을 고려해보세요. – ArslanCb

+0

이 질문의 핵심 문제는 "사용에 대해 우려하는 것"인 것처럼 보이지만 그 의미가 모두 명확하지는 않습니다. 우리가 도울 수 있도록 당신과 관련된 문제를 더 명확하게 설명하십시오. 귀하의 의견으로는, 당신이 지금이 일을하는 방식에 정확히 어떤 문제가 있습니까? –

+0

감사 네이트. 예, 내 주요 관심사는 CPU/메모리 또는 성능을 말할 수 있습니다. 어떤 옵션이 더 좋습니다. – ArslanCb

답변

6

성능 질문에 평소대로 결과가 상당히 다를 수 있으므로 대답은 무엇입니까? 의 경우 더 빠릅니다.

시작하는 장소는 지금하고있는 것처럼 일을 수행하는 데 걸리는 시간을 측정하는 것입니다. 일단 당신이 이것을 한 후에는 자신에게 물어보십시오. 그것은 일을하는 가장 빠른 방법은 아니지만 속도가 그렇게 중요하지 않은 속도 일 수 있습니다.

페이지를 처리하는 데 파일을 가져 오는 데 소요되는 시간은 얼마입니까? 1%? 10 %? 50 %? 이 비율이 높을수록, 당신이 일하는 방식을 바꾸는 것이 더 가치가 있습니다.

사이트 성능은 전체적으로 어떻게됩니까? 각 페이지로드 속도를 두 배로 높이면 사람들이 알아 차릴까요? 그렇지 않다면 성능 튜닝을 수행 할만한 가치가 없을 수도 있습니다.

더 잘할 수 있다고 생각되면 데이터베이스를 사용하여 기능을 구현하고 측정 속도가 더 빠르면 측정하십시오. 다시,이 결과는 매우 가변적 일 수 있습니다. 예를 들어 데이터베이스의 부하가 큰 경우 데이터베이스에서 결과를 가져 오는 것이 훨씬 느려질 수 있습니다. 간신히 사용되는 대용량 데이터베이스가 있다면 매우 빠를 수도 있습니다. 테스트 만이 당신에게 진실을 말할 수 있습니다.

디스크의 실제 파일을 기반으로 파일 이름을 찾기 때문에 현재 작업을 수행하는 방식이 더 간단하고 유지 관리가 간편해집니다. 데이터베이스를 사용하려고하면 데이터베이스의 파일 이름 목록을 파일 시스템의 파일 목록과 동기화하는 것에 대해 걱정해야합니다.

한가지주의해야 할 점은 파일 시스템이 매우 많은 단일 디렉토리가있을 때 많은 파일 시스템이 성능이 저하된다는 것입니다. 이 상황이 발생하면 파일을 여러 하위 디렉토리로 분할하는 것을 고려하십시오. 유명한 접근법은 이름이 az 인 디렉토리를 만든 다음 "a"디렉토리에 "a"로 시작하는 모든 파일, "b"디렉토리에 "b"로 시작하는 모든 파일을 넣는 것입니다. 그러나 이것은 아마도 중요한 것은 수만개의 파일이 있고, 심지어는 특정 파일 시스템과 그 파일 시스템이 실행되는 하드웨어에 달려 있습니다. 의견 :

당신이 결과를 미리 계산하고 데이터베이스 사람들을 저장에 대해 이야기하고 있기 때문에, 나는 데이터베이스에 물건을 넣어보다 더 나은 접근 방식은 캐싱 서버를 사용하는 것을 제안에 따라

(편집

http://memcached.org/와 같이 하이브리드 접근 방식으로 볼 수 있습니다. 지금도 여전히 작업을 수행하지만 결과를 원할 때마다 먼저 캐시를 검사하여 결과가 포함되어 있는지 확인합니다. 그렇다면 캐시 된 결과를 사용하고, 그렇지 않으면 새 glob을 계산합니다.이렇게하면 오래된 캐시 엔트리가 만료되어 새롭고 올바른 캐시 엔트리로 대체 될 수 있기 때문에 데이터베이스와 파일 시스템을 동기화하는 문제를 피할 수 있습니다.

+0

감사합니다. 이제 테스트를 수행 할 예정입니다. 결과가 다를 수 있지만 현지 환경에 적용되기 때문에 결과가 달라질 수 있습니다. – ArslanCb

+0

파일 이름은 고유하고 썸 파일은 filename-1.jpg, filename-2.jpg, filename-3.jpg 등과 같으며 각 비디오의 엄지 손가락은 1 ~ 30 개입니다. 일단 데이터가 저장되면 나는 매번 glob하지 않아야하기 때문에 use database를 생각하고 있었다. 그냥 이미 저장된 데이터를 재사용하고 json (ed) 배열의 조합으로 훨씬 더 빠를 수 있습니다. – ArslanCb

+0

나는 당신이 의미하는 것을 봅니다. 결과는 사전 계산되어 있으므로 본질적으로 빠릅니다. 하지만 데이터베이스 대신 memcached와 같은 캐싱 서버를 사용하는 것이 좋습니다.이 방법을 사용하는 것이 더 적절합니다. –

0

이미 비디오 자체에 대한 정보를 데이터베이스에 저장하고있는 경우 비디오 당 엄지 손가락 수만 비디오 데이터가 저장된 테이블에 저장하는 것이 좋습니다. 이미 쿼리 한 레코드의 필드를 참조하기 만하면되므로 전체 파일 이름의 별도 테이블을 쿼리하는 것보다 훨씬 빠릅니다. 이것은 두 가지 아이디어 사이에 좋은 절충안이 될 수 있습니다. 그러나 엄지의 이름이 일관되고 프로그램 가능해야합니다. 예를 들어 동영상 123에 4 개의 손가락이있는 경우 다음을 생성 할 수 있습니다.

/path/to/video_123/thumb_01.jpg 
/path/to/video_123/thumb_02.jpg 
/path/to/video_123/thumb_03.jpg 
/path/to/video_123/thumb_04.jpg 
+0

엄지 손가락은 크기가 다르기 때문에 고맙습니다. 사용자는 또한 사용자 지정 엄지 손가락을 업로드하고 기존 손가락을 삭제할 수 있습니다. 파일 이름은 기본적으로 엄지 손가락의 접두사입니다. 엄지 손가락은 파일 이름 -300x240-2.jpg와 같은 이름을 가질 수도 있습니다. 내 오래된 코드는 증분 만 사용했고 숫자는 저장했지만 지금은 조금 증가한 것 이상입니다. 제안을 주셔서 감사합니다. 지금 json (에드) 배열을 저장하고 있습니다. 그리고 나는 그것이 목적을 달성 할 것이라고 생각합니다. S.O에는 굉장한 People and Great 커뮤니티가 있습니다. – ArslanCb

관련 문제