2011-01-04 4 views
5

이것은 a previous question I asked과 관련이 있으며, 은 asp.net mvc 웹 응용 프로그램을 두 개의 응용 프로그램 (하나는 공개, 하나는 관리자)으로 나눕니다. 둘 다 물론 동일한 데이터베이스를 공유하게 될 것입니다.NHibernate - 동일한 데이터베이스에 액세스하는 두 개의 SessionFactories

2 개의 웹 응용 프로그램에서 두 개의 호스트 응용 프로그램과 두 개의 개별 Nihbernate 세션 팩토리가 있습니다. 내 관심사는 개별 데이터 캐시가 모든 종류의 문제를 일으킬 것이라는 점입니다.

이 글을 게시하는 동안 유사한 문제를 다루는 this question을 보았습니다 (다른 이유로). 정말 저용량 관리 응용 프로그램 용으로 일종의 분산 캐시를 설정하고 싶지는 않습니다.

어떻게 해결할 수 있습니까? 과감한 조치없이 관리 섹션을 NHibernate에서 자체 응용 프로그램으로 분리 할 수 ​​있습니까?

감사합니다.

+0

솔루션은 "데이터 캐시"의 의미에 따라 다릅니다. 제 2 수준 캐시 공급자 중 한 명이라고 생각합니까? – Paco

+0

@Paco - 그게 맞아. – UpTheCreek

답변

1

데이터의 불일치가 항상 문제가 되더라도 성공적으로 실행합니다. 그러나 2 차 수준 캐시는 사이트별로 구성 할 수 있으므로 관리자의 특정 캐시 영역에 대해 사용하지 않도록 설정하거나 해제 할 수 있습니다.

명시 적 업데이트가 플러시되고 직접 지속되므로 2 차 수준 캐시는 읽기 전용으로 사용됩니다.

일단 사이트의 콘텐츠가 수정되면 "오래된"것이므로 사이트가 캐시를 제거하도록 지시하려면 일종의 트리거가 필요합니다. NHibernate는 올바르게 기억하면 특정 엔티티 타입에 대한 모든 2 차 레벨 캐시를 제거합니다.

귀하의 사이트 대 관리자가 다른 엔티티를 업데이트하는 경우 병행성에 대한 귀하의 문제는 최소화 될 것이라고 생각합니다. 인터넷 쇼핑몰에서 예를 들어 :

Site will create orders, modify customers etc but only read products, prices and categories 

Admin will modify orders, products, prices and categories but only read customers 

당신은 그러나 수정 된 경우에만 갱신에 NHibernate에 지시 할 수 있습니다 필드/당신이 당신의 매핑에 = "true"로 동적 업데이트의 동시성 문제에 대해 우려하고 개체에 대한 개체의 속성. 이렇게하면 문제가 완전히 해결되지는 않지만 동시성 문제는 최소화됩니다.

0

먼저, NHibernate doesn't enable second-level cache by default을 알아야합니다.

그래서, 실제로 당신도 단지 분산 사용하지 않는 캐시에 완료 추가 단계가 필요하지 않습니다. "Admin"ISessionFactory를 사용하고 L2 캐시를 활성화하지 마십시오.

단일 App/Factory에서 일종의 문제 일 수 있지만 이미 문제를 2 개의 다른 실제 앱으로 나누어 해결했습니다.

+0

감사합니다. 그러나 단일 공장 내에서 왜 이것이 문제가됩니까? 당연히이 문제는 우리가 ** 단일 세션 팩토리를 사용하지 않기 때문에 발생합니다. 또한 2 차 수준 캐시와 관련하여 - 공용 사이트에서만 사용하고 관리 사이트에서 스위치를 끈 채로 남아있는 경우에도 - 여전히 불안정한 상태로 이어질 수 있습니까? (잠재적으로 다른 데이터가 두 위치에 저장되어 있습니다. 1. 공개 앱이 사용하는 캐시에서 2. 관리자 앱이 직접 액세스하는 DB에서 2.. – UpTheCreek

+0

@UpTheCreek, 맞아, "Admin-part"에 대한 캐싱/캐시 무효화에 대해 머리를 숙이지 않아도된다고 말하고 싶었습니다. 물론, 일관성 문제, 모든 종류의 동시성 문제를 가질 수 있지만 캐싱 이상의 주제가 될 수 있습니다. 나는 당신이 "사용량이 적은 관리 응용 프로그램 용으로 일종의 분산 캐시를 설정해야하는 것을 정말로 원하지 않는다"고 말했기 때문에 언급했습니다. 공공 장소에서 부실 데이터에 대해 걱정해야합니다. –

+0

또한, imho, 그것은 하나의 응용 프로그램을 가지고 확장 성을 만드는 것이 더 나은 접근 방법입니다. 물론, 모든 "cache-on-here-and-cache-off-there"문제에 직면 하겠지만, 더 많은 제어가 가능하고 2 개의 앱간에 "동기화"를 생각할 필요가 없습니다. –

관련 문제