2013-10-14 1 views
0

대부분의 db 엔티티에 대해 증가 ID 생성기를 사용하는 기존 제품이 있습니다. 새 버전은 동일한 데이터베이스에서 작동하는 여러 서버 인스턴스의 클러스터링을 허용해야합니다. 이 제품은 MSSQL 및 Oracle 데이터베이스 사용을 지원합니다.nhibernate의 ID 생성기를 변경하고 기존 데이터베이스를 이전하십시오.

그래서 ID 생성기를 기본으로 변경하는 것을 고려해 보았습니다. 그러나 몇 가지 문제가 있습니다.

  • 두 가지 알고리즘이 Oracle 및 MSSQL에 사용됩니다. 코드에서 개체를 만들 때 투명하게 나타 납니까?
  • 기존 데이터베이스를 어떻게 마이 그 레이션 할 수 있으며 이미 사용중인 ID를 발전기가 사용하지 않게 할 수 있습니까?

미리 감사드립니다.

답변

0

필자는 hilo 생성기 전략을 제안합니다. 여러 프로세스에 사용할 수 있다는 장점이 있으며, NHibernate에서 생성 된 ID를 사용하여 성능상의 이점을 유지할 수 있습니다 (특히 삽입의 일괄 처리 허용).

MSSQL을 사용하면 열을 ID 열로 변경할 수 없습니다. 새 열을 추가 한 다음 모든 외래 키를 업데이트해야합니다. 많은 테이블/관계가있는 경우 매우 복잡 할 수 있습니다 어질러 놓은.

hilo 생성기 전략을 사용하면이 문제를 완전히 피할 수 있습니다. 단지 구성 변경이며 데이터베이스에 테이블을 추가하여 테이블의 높은 값을 저장하고 해당 테이블에 올바른 값을 채우는 것입니다.

+0

답변 해 주셔서 감사합니다. 그래도 새 열이 필요한 이유는 무엇입니까? 네이티브 생성기를 다음 사용 가능한 ID에서 시작하도록 설정할 수 있습니까? 하지만 Hilo 전략을 시험해보고 어떻게 작동하는지 확인해 보겠습니다. – LLdk

+0

MSSQL을 사용하면 열을 ID (MSSQL의 기본 생성 전략)로 변경할 수 없습니다. 새 열이어야합니다. –