2010-05-13 4 views
3

응용 프로그램을 시작할 때 대부분의 객체를 캐시 (메모리)에 저장하지 않는 것이 왜 저에게는 일어 났습니까?데이터베이스의 캐시/메모리에있는 대부분의 객체를 유지 하시겠습니까?

큰 웹 응용 프로그램이 아닌 경우 또는 캐시/메모리에 넣고 자하는 정도를 설정하십시오.

나는 단지 1GB 이하의 RAM이나 그보다 훨씬 적은 용량을 필요로 할 수도 있다고 생각한다.

데이터베이스를 쿼리하지 않아도 응용 프로그램의 속도를 향상시키기 위해 모든 것이 있습니다.

좋은 생각인가요?

+0

이것은 매우 자유로운 질문입니다. 그것이 좋은 생각인지 여부는 귀하의 특정 요구 사항에 따라 격렬하게 변할 것입니다. 중요한 요소는 데이터가 자주 변경되는지 여부, 부실 데이터가 수용 가능한지 여부 등과 같은 단일 응용 프로그램 서버 또는 전체 클러스터의 여부를 포함합니다. – meriton

+0

하나의 데이터베이스 만 있으며 상대적으로 작은 응용 프로그램입니다. 그리고 데이터가 너무 자주 변경되지 않습니다. 그러나 오래된 데이터는 허용되지 않습니다. – feiroox

답변

1

캐싱은 확실히 좋은 아이디어이며 널리 사용되지만 올바르게 구현되어야합니다. 잘못하면 함정이 많이 있습니다. memcached과 같이 입증 된 시스템 중 하나를 살펴보십시오.

0

다른 노드가 데이터베이스를 업데이트하기 시작할 때 빨리 Not so good idea이됩니다.

그런 경우 캐시에 부실 데이터가 있습니다.

+0

복제는 DB가 메모리 또는 디스크에 저장된다는 사실과 정확히 0의 관계가 있습니다. 인 메모리 DB를 사용하여 여러 대의 컴퓨터에서 인 메모리 데이터베이스를 복제 할 수 있습니다. 그리고 복제 문제는 DB가 디스크에있을 때와 정확히 동일합니다. – SyntaxT3rr0r

0

자주 사용하는 개체의 캐시를 메모리에 유지할 수 있습니다. 기본 데이터베이스 상태가 변경 될 때 캐시를 새로 고치는 방법을 추가하는 것을 잊지 마십시오.

예 : 사용자 테이블이 있고 많은 페이지에서 사용자 이름이 필요하면 애플리케이션 시작시 전체 테이블을 캐시에로드하십시오. 온라인 또는 새 사용자를 추가 할 때 캐시를 업데이트하십시오. 사용자 테이블에서 항목 수정/삭제

0

데이터베이스에 개체를 저장하지 마십시오. 당신이 유지하는 것은 물건의 상태입니다. 따라서 앱이 중지/종료/재시작 한 후에도 정확히 동일한 상태를 유지할 수 있습니다. 객체 상태를 유지하려면 선택의 여지가 없지만 db (또는 다른 것을 사용하면 파일 시스템에 데이터를 쓸 수 있습니다)를 사용하십시오.

+0

예 데이터베이스를 완전히 우회하고 싶지 않습니다. 전혀. – feiroox

1

캐싱은 확실히 좋은 생각입니다.

데이터베이스는 포괄적 인 솔루션이 아니지만 프로그램 실행간에 일관성을 유지해야합니다. 데이터를 변경했지만 프로그램을 데이터베이스로 업데이트하기 전에 프로그램이 중단되면 어떨까요?

가벼운 메모리 상주 데이터베이스로 현재 쿼리를 유지하면서 메모리에서 많은 것을 실행할 수 있습니다. SQL 대신 ORM 도구를 사용하면 스위치가 거의 투명하기 때문에 특히 효과적입니다.

0

세부 사항은 여기 답변의 범위를 벗어하지만, 많은 수를 유지하기 위해 우리를 허용 한 우리는 EHCache는 (http://ehcache.org/)

분산 캐시에 대한 지원의 조합, 및 디스크 오버 플로우를 사용하여 좋은 경험이 수많은 계산대에서 제공되는 사이트에 대해 계산 상으로 무겁지 만 캐시에서 상당히 변하지 않는 페이지가 있습니다.

배포는 항목을 올바르게 무효화 한 경우 스 태니스 문제를 해결하고 디스크 오버플로는 기본적으로 메모리가 부족한 캐시를 모두 캐시 할 수 있습니다.

물론 실제 응용 프로그램에서는 구현이 간단하지 않지만 캐시가 버블 링되면 성능이 크게 향상되었습니다.

관련 문제