조직은 서로 다른 시점에 개발되었으며 따라갈 수 없기 때문에 동일한 클래스의 서로 다른 버전을 사용하여 서로 다른 애플리케이션을 사용하는 것이 현실입니다. 이러한 응용 프로그램이 종종 서로 데이터를 공유해야 하는 것도 사실입니다.
데이터베이스를 통해 이 작업을 수행할 수 있습니다. 그러나 이는 느리고 확장 가능하지 않습니다. 당신이 정말로 원하는 것은 분산 캐시 빠르고 확장 가능합니다. 그러나 런타임에 개체를 공유하면 즉시 버전 호환성 문제가 발생합니다.
이를 수행하는 한 가지 방법은 개체의 한 버전을 다른 버전으로 변환할 수 있는 XML을 사용하는 것입니다. 그러나 그것은 매우 느립니다. 또 다른 방법은 하나의 개체 버전을 가져와 다른 버전으로 변환하는 고유한 사용자 지정 변환을 구현하는 것입니다. 그러나 이것을 유지해야 하므로 많은 노력이 필요합니다.
분산 캐시가 어떻게든 버전 호환성을 처리해 준다면 좋지 않을까요? 잘, NCache 정확히 그렇게합니다. NCache 다른 버전 간의 이진 수준 개체 변환을 제공합니다. XML 구성 파일을 통해 다른 버전을 매핑할 수 있으며 NCache 한 버전에서 다른 버전으로 변환하는 방법을 이해합니다.
또한 NCache 이 모든 다른 버전을 XML이 아닌 바이너리 형식으로 저장하지만 데이터 크기는 매우 작고 작아서 빠릅니다. 트래픽이 많은 환경에서 개체 크기는 추가 대역폭 소비로 이어지며 관련 비용이 있습니다.
다음은 예입니다 NCache 클래스 버전 매핑이 있는 config.ncconf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<cache-config name="myInteropCache" inproc="False" config-id="0" last-modified="" type="clustered-cache" auto-start="False"> ... <data-sharing> <type id="1001" handle="Employee" portable="True"> <attribute-list> <attribute name="_Name" type="System.String" order="1"> <attribute name="_Age" type="System.Int32" order="2"> <attribute name="_Address" type="System.String" order="3"> <attribute name="_ID" type="System.String" order="4"> <attribute name="_PostalAddress" type="System.String" order="5"> </attribute></attribute></attribute></attribute></attribute></attribute-list> <class name="DataModel.Employee:1.0.0.0" handle-id="1" assembly="DataModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" type="net"> <attribute name="_Name" type="System.String" order="1"> <attribute name="_Age" type="System.Int32" order="2"> <attribute name="_Address" type="System.String" order="3"> </attribute></attribute></attribute></class> <class name="DataModel.Employee:2.0.0.0" handle-id="2" assembly="DataModel, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" type="net"> <attribute name="_ID" type="System.String" order="4"> <attribute name="_Name" type="System.String" order="1"> <attribute name="_Age" type="System.Int32" order="2"> <attribute name="_PostalAddress" type="System.String" order="3"> </attribute></attribute></attribute></attribute></class> </type> </data-sharing> ... </cache-config> |
어떻게 NCache 해?
위에서 볼 수 있는 config.nconf 파일에서 Employee 클래스에 먼저 정의된 속성 집합이 있음을 알 수 있습니다. 이는 버전 독립적 속성이며 모든 버전에 나타납니다. 이것은 실제로 다른 버전에 나타나는 모든 속성의 상위 집합입니다. 그 아래에서 버전별 속성을 지정하고 위의 버전 독립적 속성에 매핑합니다.
Employee 버전 1.0.0.0의 하위 집합이 있는 Employee 버전 2.0.0.0을 저장했다고 가정해 보겠습니다. 이제 다른 응용 프로그램이 동일한 Employee를 가져오려고 시도하지만 버전 2.0.0.0으로 보고자 할 때 NCache 데이터로 채울 버전 2.0.0.0 속성과 비워 둘 속성을 알고 있습니다.
둘째, 위의 샘플 구성에서 버전 2.0.0.0에 주소 필드가 있음에도 불구하고 직원 버전 1.0.0.0에는 주소 필드가 없음을 알 수 있습니다. 따라서 이 경우 언제 NCache 캐시에 저장된 Employee 1.0.0.0을 읽고 이를 Employee 버전 2.0.0.0으로 변환하려고 시도하지만 이 최신 버전에는 주소 필드가 없기 때문에 복사하지 않는다는 것을 알고 있습니다.
다른 많은 시나리오가 있습니다 NCache 당신을 위해 매끄럽게 처리합니다. 이에 대한 자세한 내용은 온라인 제품 설명서를 참조하십시오.
마지막으로 이 모든 것의 가장 좋은 점은 직렬화 코드를 작성하거나 이것을 사용하기 위해 애플리케이션에 코드를 변경할 필요가 없다는 것입니다. NCache 기능. NCache 은(는) 런타임에 클래스의 메모리 내 직렬화 및 역직렬화 코드를 생성하고 매우 빠른 컴파일된 형식을 사용하는 런타임 코드 생성 메커니즘을 구현했습니다.
요약하면 사용 NCache 이제 애플리케이션 코드를 수정하지 않고도 애플리케이션 간에 서로 다른 객체 버전을 공유할 수 있습니다.