2011-08-19 1 views
3

필자는 Postgres 데이터베이스의 관리에 대한 통제권이 없다. 특정 날짜에 리소스 (실제 항목)가 온라인 또는 오프라인 상태인지 확인하는 일정을 작성하고 있습니다. 불행히도, 그들이 오프라인이라면 텍스트 필드에서 리소스 이름을 찾아서 만 확인할 수 있습니다. 내가 PostgreSQL과 PHP를 "좋아"하는 좋은 대안/관행은 무엇입니까?

select * from log WHERE log_text LIKE 'Resource Kit 06%' 

문제

을 사용하고

우리가 LIKE 180 + 시간을 사용해 달력을 구축 할 때 (최소 6 개 자원 하루)이 될 수있는 느린 것입니다. 누구든지이 속도를 높이는 방법을 알고 있습니까 (데이터베이스를 수정할 수 없음을 명심하십시오). 또한, 내가 데이터베이스 끝에 할 수있는 일이 없다면, 내가 PHP 끝에서 할 수있는 일이 무엇입니까?

+0

cron 작업을 통해 다른 데이터베이스 응용 프로그램 (키/값 저장소 일 수도 있음)에 테이블을 복사하고 쿼리 할 수 ​​있습니까? 죄송합니다 - 해킹 만 생각하면됩니다.) – madflow

+0

전체 테이블의 정의를 게시 할 수 있습니까? 추가 열 및 특히 인덱스를 알고있을 때 최적화 가능성이있을 수 있습니다. 현재 선택을 특정 날짜로 어떻게 제한합니까? –

+0

조금 더 설명해 주시겠습니까? 왜 모든 것을 한 번에 선택할 수 없습니까? – Karolis

답변

1

나는 캐시의 어떤 형태가 이것을 위해 필요할 것이라고 생각한다. 데이터베이스에서 아무 것도 변경할 수 없기 때문에 유일한 기회는 데이터를 가져 와서 좀 더 접근하기 쉽고 빠른 형식으로 저장하는 것입니다. 이것은 테이블에 삽입 된 데이터 빈도에 크게 의존합니다. 선택보다 삽입이 많으면 아마 도움이되지 않을 것입니다. 다른 방법으로는 성능이 약간 향상 될 수 있습니다.

아마도 전체 텍스트 색인 생성이 가능한 Lucene 검색 엔진을 사용해보십시오. 구현은 Zend이고 심지어 아파치도 일부 http service입니다. 그러나 나는 그것을 시험 할 기회가 없다.

강력한 기능을 사용하지 않으면 PHP에서 자신의 캐싱 메커니즘을 작성할 수 있습니다. 그것은 postgres만큼 빠르지는 않을 것입니다. 그러나 아마도 인덱스가없는 LIKE 쿼리보다 빠릅니다. 질의가 좀 더 정교해야 할 경우 (조건, 그룹화, 순서 ...), 파일 기반 SQLite 데이터베이스를 사용할 수 있으며 서버에서 실행중인 추가 서비스가 필요하지 않습니다.

또 다른 방법은 데이터베이스에서 트리거를 사용하는 것입니다. 삽입 데이터 저장소에 필요한 정보를 인덱싱 된 방식으로 다른 테이블에 저장할 수 있습니다. 그러나 데이터베이스를 관리 할 수있는 권리가 없으면 막 다른 길일 수 있습니다.

자세한 내용은 궁금한 점이 있으시면보다 구체적으로 질문하십시오.