MVC 웹 사이트에서 데이터베이스 호출 수를 줄입니다.

asp.net-mvc-4 c# dapper

문제

여러 데이터베이스에 연결하는 복잡한 C # MVC 4 웹 사이트가 있습니다. 모든 요청은 다음 단계를 거칩니다.

  1. 사용자가 로그인되어 있는지 확인하고 인증 쿠키에서 사용자 이름을 가져옵니다.
  2. 조회 데이터베이스를 조회하여 클라이언트의 데이터베이스가있는 위치를 찾아 연결 문자열을 가져옵니다 (우리는 각 클라이언트마다 다른 데이터베이스를 유지 보수합니다).
  3. 클라이언트 데이터베이스에 연결하고 쿼리를 실행하여 사용자의 세부 정보 (ID, 전화 번호, 환경 설정 등)를 가져옵니다.
  4. 요청에 따라 선택 / 업데이트 / 삭제 또는 삽입을 수행하십시오.

위의 단계 외에도 데이터베이스를 쿼리하고 역할 등을 확인하는 다양한 작업 필터가 있습니다. 이러한 작업 필터는 사용자 정보를 가져 오는 1,2,3 및 4 단계를 수행해야합니다. 지금은 수행해야하는 쿼리의 수가 많아서 애플리케이션이 느리게 실행되는 것으로 나타났습니다. 세션에서 연결 문자열과 사용자 세부 정보를 캐싱하여 극적으로 속도를 높일 수 있습니다.

웹 사이트를 곧 서버 팜으로 옮길 것이며 캐시를 사용하기를 원하지 않습니다. 내가 간과하고있는 다른 명백한 설계 선택 사항이 있습니까, 아니면 서버 팜에서 작동하는 memcached 또는 일부 솔루션의 형태로 캐싱을 계속 사용해야합니까?

편집 : 나는 데이터베이스와 웹 사이트가 다른 서버에 있고 데이터베이스 호출이 클라이언트의 위치에 따라 WAN을 통해 이루어져야한다고 언급 했어야합니다. 성능을 이미 측정했으며 데이터베이스 호출이 성능 저하의 원인임을 알고 있습니다.

수락 된 답변

여기서 HttpCookieAuthenticationCookie 를 사용하여보기 및 컨트롤러에서 액세스 할 중복 데이터의 상태를 유지할 수 있습니다. 내가 말한 간단한 예는 로그인 한 사용자의 userId와 userName의 상태를 유지하는 것입니다. 이것은 참조로 사용할 수 있습니다 :

private void SetCookie(string userName, long userId)
{
   string IdUser = Common.Encrypt(userId.ToString());
   FormsAuthentication.SetAuthCookie(userName, false);
   HttpCookie uCookie = new HttpCookie("UserId", IdUser);
   Response.Cookies.Add(uCookie);
}

이것은 쿠키를 생성하는 방법을 보여주는 샘플 코드 일뿐입니다. 쿠키에 정보를 설정 한 후에는 ID 나 이름, 전화 번호 또는 다른 것이 필요할 때마다 데이터베이스에 접근 할 필요가 없습니다. 당신이 만든 쿠키에서 그 정보를 검색하면됩니다.

희망이 도움이됩니다.


인기 답변

첫 번째 단계 후에 쿠키를 생성 및 인증하고 세션 또는 쿠키에 데이터를 저장 한 다음 나중에 저장된 쿠키 / 세션의 데이터를 사용하고 1 단계를 건너 뛸 수 있습니다.

데이터를 빠르게 가져 오기 위해 클러스터 인덱싱을 시도 할 수 있습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow