2009-10-26 6 views
4

웹 앱에서 참조해야하는 10 개의 "카테고리"가 있다고 가정 해보십시오. 현재 DB에 이러한 카테고리를 저장하고 있으며베이스 페이지에서 pageload하는 동안 카테고리 이름과 ID를 가져 와서 해시 테이블에 저장 한 다음 해시 테이블을 사용하여 카테고리를 참조합니다. 나는 DB 호출이 각 pageload 동안 만들어지고 있다는 것을 깨달았다. 주어진 세션 동안 결코 변경되지 않으므로이 범주를 한 번만 가져와야합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?사전 항목을로드하고 사용하는 가장 좋은 방법은 무엇입니까?

  1. 내가하고있는 모든 작업을 수행하지만 응용 프로그램 변수로 저장합니까?

  2. 하드 코드는 코드에 범주를 지정하고 데이터베이스를 사용하지 않습니까?

  3. 세션 변수에 범주를 저장 하시겠습니까? 세션이 비어있는 경우에만 DB를 호출하십시오.

  4. 다른 건요?

나는 이런 일을하는 것이 최선인지 궁금해.

답변

2

범주가 사용자에 따라 다르면 세션 변수에 저장합니다. 그렇지 않으면 ASP.NET 캐싱 기능 (또는 기본 분산 캐싱)을 사용합니다. 이렇게하면 범주를 캐시해야하는 기간을 제어 할 수있는 동안 데이터베이스를 치는 것을 피할 수 있습니다.

+0

감사합니다. 사실 솔직히 말하면 이러한 범주는 결코 변하지 않습니다. 응용 프로그램의 수명 동안 항상 동일합니다. 비즈니스 요구 사항에 변경 사항이없는 경우 ... 캐싱을 권장 하시겠습니까? 열거 형으로 카테고리를 만드는 것이 추악할까요? – Prabhu

+0

정말 얼마나 많은 객체가 카테고리 객체와의 관계에 의존하는지에 달려 있습니다. 카테고리가 한 곳에서 사용되고 한 곳에서만 사용되는 경우 (보고되지 않음), smallint와 enum을 사용하는 것이 좋습니다. 그러나 여러 객체에 대해 사용되거나 예를 들어 SQL보고 서비스는 데이터베이스에 보관합니다. 개인적으로 열거 형이 있습니다. 그러나 나는 이것들 중 하나인지 모르겠다 :) –

0

데이터베이스를 호출하는 것이 항상 그렇게 비싼 것은 아니지만 일반적인 웹 사이트에서는 각 페이지로드에 대해 DB를 수십 번 호출합니다. 그러나 성능면에서 골칫거리가된다면 ORM 솔루션을 사용해보십시오. 탁월한 오픈 소스 NHibernate이 마음에 듭니다. 이것은 데이터베이스를 클래스와 객체에 매핑하기위한 "사실상의"표준입니다. 매핑 외에도 캐시와 연결 풀링의 두 가지 수준을 자동으로 제공합니다. 너무 많은 문제없이, 귀하의 웹 사이트는 산사태로 인해 다른 웹 사이트보다 뛰어난 성능을 발휘합니다.

ORM을 사용하는 단점은 무엇입니까? 많은 사람들에게, 그것은 다소 가파른 학습 곡선으로 간주됩니다. 이 내용을 읽으려면 NHibernate Best Practices을 방문하십시오. 처음에는 힘들었지 만 확실히 가치가있었습니다.

NHibernate를 FluentNHibernate과 결합하면 사용하기가 편리해집니다.

관련 문제