2011-05-04 3 views
2

시나리오 : 하이/로우는 테이블이 비어 소호 100NHibernate에 하이/로우 - IDS 격차

MyEntity 초기화됩니다.

서로 다른 연결을 가진 두 개의 세션 모두에 세 개의 항목이 삽입되었습니다.

TableIds

1 
2 
3 
100 
101 
102 

세번째 나중에에 와서 세 가지 항목을 삽입하는 경우 :

TableIds

... 
200 
201 
202 

이러한 격차를 얻을 수있는 방법이 있나요

를?

+0

거의 모든 "순차적"할당 방법은 일부 상황에서 갭을 생성하거나 성능 병목 현상을 일으킬 수 있습니다. 이러한 갭이있는 문제가있는 것이 무엇이든지 다시 작업하는 것이 낫습니다. –

+0

당신은 dev 컴퓨터에서 일하고 있습니까? (항상 멈추고있는 앱으로)?응용 프로그램을 계속 스풀링하면 프로덕션에서 문제가 될 가능성이 적습니다. 예를 들어 설정에서 매번 복용하는 전화 번호를 다음과 같이 줄일 수도 있습니다. 10 어떤 것을 다소 완화시킬 것입니다. – UpTheCreek

답변

3

Lo 값은 Session이 아닌 SessionFactory에 저장됩니다. 응용 프로그램을 다시 시작하고 SessionFactory의 새 인스턴스를 만들 때만 틈새가 생깁니다.

새 Hi 값이 데이터베이스에서 가져 와서 SessionFactory에 저장되므로 웹 팜이있는 경우 각 사이트는 자신의 '다음'안녕 가치가있는 SessionFactory의 자체 인스턴스를 갖게됩니다. 데이터 베이스. Lo 값이 부족하면 Hi를 데이터베이스에서 사용 가능한 다음 Hi 값으로 업데이트합니다.

편집 : 당신은 나는 전혀 힐로을 사용하지 않는 것이 좋습니다 대신 GuidComb을 사용 클라이언트 응용 프로그램이있는 경우

, 그것은 순차적 가이 드 그리고 당신은 늘 간격에 문제가 있습니다.

기존 응용 프로그램이므로 식별자를 실제로 변경할 수 없기 때문에 클라이언트 응용 프로그램에 자체 SF가있는 웹 서비스를 통해 삽입하도록 요청하는 것이 좋습니다. 대신 단일 Hi를 유지할 수 있습니다. 클라이언트 응용 프로그램마다 여러 개의 안녕이 있습니다.

그렇게 할 수 없다면 소호를 낮추어야합니다.

+0

지금 우리는 webapp에 대해 하나의 SF를, 서비스에 대해 하나의 SF를, 그리고 클라이언트에 대해 SF를, 그리고 MaxLo = 100을 가지고 있습니다. webapp와 서비스는별로 중요하지 않지만, 모든 클라이언트 연결은 내가 보았을 때 많은 갭을 야기 할 수 있습니다. 아이디어, 생각? 아마 클라이언트를 위해 그것을 돌려라? – Daniel

+0

@ 대니얼 - 의견을 바탕으로 내 대답이 업데이트되었습니다. – Phill

+0

경로는 이미 ID로 선택되었습니다. 물론 "약간의 작업"을 통해 변경 작업을 수행 할 수 있습니다. 나는 당신이 제안한대로, 공통의 서비스 계층으로 그 경로를 나아갈 것입니다. 하지만 그게 옵션이 아니라면 ...? – Daniel

2

마찬가지로 PhillsessionFactory을 빌드 할 때 틈이 나타나는 것으로 나타났습니다. 응용 프로그램이 재시작되거나 클라우드에서 실행 중이고 각 노드에 Hilo의 자체 세트가 있습니다.

당신은 격차를 줄이기 위해 10보다는 100에 보라를 줄일 수 및/또는 나는 마음의 용이성을 위해 int64보다는 int32를 사용하는 것이 좋습니다.

그러나 실제로 갭이 중요한가요? 너 스스로 다 떨어지는 걸 본 적이 있니?

Hilo을 사용할 때 많은 틈새가있는 성능 (데이터베이스 문제)에 대해 부정적인 것을 읽은 적이 결코 없습니다. 내가 본 유일한 사실은 어떤 사람들은 int32을 사용할 때 또는 lo이 높게 설정되었을 때 사용하지 못한다고 불평한다는 것입니다.

+0

int32를 사용하지 않습니다. 100 개가 이미 사용 된 경우 100에서 10으로 이동합니다. 어떤 문제, 팁? – Daniel