문제

저는 애플리케이션을 작성 중이며 다양한 언어로 된 일부 사전 값을 갖게 될 것입니다.GetText를 사용할 수 있다는 것을 알고 있지만 AFAIR 파일은 편집 후 컴파일해야 하며 사용자가 사전을 편집할 수 있도록 하고 싶지만 서버에서 .mo 파일을 다시 컴파일할 수 없습니다.얼마나 많은 언어가 사용될지 모르기 때문에 솔루션이 탄력적이어야 합니다.

잘 작동하도록 데이터베이스를 설계했고 스키마도 괜찮아 보이지만 모든 사전 값에 대해 두 개의 조인이 있으므로 솔루션이 너무 빠르지는 않습니다.

그렇기 때문에 사전 값을 한 번 저장하고 값을 편집한 후에만 새로 고치려고 생각하고 있습니다.불행하게도 PHP 정적 변수는 요청이 끝나면 죽기 때문에 사용할 수 없습니다.사용자별로 DB 호출을 해야 하기 때문에 세션을 사용하고 싶지 않습니다.이상적으로는 Java에서와 마찬가지로 정적 변수를 사용하고 싶습니다. 응용 프로그램이 JVM에 있는 한 정적 변수는 그대로 유지됩니다.

모든 사용자(사용자별이 아님)에 대해 일부 변수(내 예에서는 사전, 사전 항목 등)를 오랫동안(요청별이 아닌) 저장하는 가장 좋은 솔루션은 무엇입니까?

나는 다음과 같은 것을 만들 생각이다 DictionaryValues 클래스를 한 번 직렬화한 다음 요청이 있을 때마다 역직렬화합니다.누군가가 사전을 편집할 때마다 객체는 다시 직렬화되고 이전 직렬화된 객체를 대체합니다.물론 사전 값을 읽는 빈도에 비해 편집이 거의 발생하지 않습니다.

이것이 좋은 해결책입니까?객체를 직렬화하여 디스크에 저장해야 합니까, 아니면 데이터베이스에 써야 합니까?어느 것이 더 빠르나요?

어쩌면 그 문제에 대한 더 나은 해결책을 찾을 수 있을까요?

도움이 되었습니까?

해결책

PHP를 사용해 볼 수 있습니다 APC.빠르고 사용하기 쉽습니다.객체를 직렬화/역직렬화하고 쉽게 저장/가져올 수 있습니다.

분산 환경에서는 다음을 사용하여 동일한 기능을 수행할 수 있습니다. 멤캐시.

다른 팁

Memcache/APC가 너무 많거나 불가능한 경우 몇 가지 옵션:

데이터베이스 값을 자주 PHP 파일로 "컴파일"하여 포함할 수 있습니다.이는 구문 분석 및 처리 측면에서 가장 빠른 방법입니다.

각 페이지에 모든 사전 값이 필요하지 않은 경우(아마도 그렇지 않습니까?) JOIN 없이 작동할 수 있는 캐싱 테이블을 사용할 수 있습니다.이는 풋프린트 관점에서 볼 때 가장 좋은 솔루션이 될 것입니다.

몇 가지 옵션이 있습니다:

  1. 공유 메모리를 사용할 수 있습니다(shmop 또는 멤캐시).
  2. 파일이나 데이터베이스에 캐시할 수 있습니다. 시도해 보세요. PEAR::Cache_Lite (또는 APC @jldupont가 제안한대로)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top