Dynamic Compact 직렬화 구현
NCache 애플리케이션 데이터를 직렬화된 형식으로 저장합니다. 캐시에 추가되기 전에 캐시 클라이언트에서 직렬화됩니다. 따라서 캐시에 추가하는 데이터도 직렬화 가능으로 표시되어야 합니다. 기본 바이너리 직렬화를 지원하고 JSON 정보가 네트워크를 통해 이동하지 않으며 네트워크의 개체 크기가 줄어듭니다. 개체 크기가 줄어들수록 네트워크 이동 속도가 빨라지고 결국 비용이 감소하여 전체 응용 프로그램 성능이 향상됩니다.
컴팩트 직렬화는 다음과 같은 이점이 있는 이진 직렬화이기도 합니다.
컴팩트 데이터 크기
In NCache 이진 데이터의 경우 직렬화된 개체의 크기가 작습니다. 특정 시나리오에서는 데이터 크기가 기본 직렬화의 크기보다 10배 작을 수 있습니다. 직렬화된 객체가 작을수록 네트워크에서 이동하는 데 시간이 덜 걸리므로 처리량이 높아집니다. 이는 캐시 서버의 메모리 소비를 줄이는 데도 도움이 됩니다. 이런 방법으로, NCache 더 나은 성능을 달성하여 시간과 비용을 절감합니다. 작은 개체 크기와 빠른 네트워크 트래픽으로 애플리케이션 성능이 향상됩니다.
기본 직렬화보다 빠름
컴팩트 직렬화는 네이티브 직렬화만큼 리플렉션에 의존하지 않으므로 네이티브 직렬화보다 빠릅니다. 기본 직렬화는 속성 정보에 대한 리플렉션을 사용합니다. 이러한 반사는 다음에서 방지됩니다. NCache의 컴팩트 직렬화. 압축 형식에 대한 형식 정보는 캐시가 초기화될 때 한 번만 로드되므로 기본 직렬화를 사용하여 직면하는 오버헤드가 줄어듭니다. 벤치마크에 따르면 특정 사용 사례에서는 기본 직렬화보다 5~10배 빠른 것으로 나타났습니다.
코드 변경 없음
컴팩트한 클래스를 직렬화하기 위해 코드를 변경할 필요가 없습니다. 필요한 유일한 단계는 관리 도구( NCache Management Center 또는 해당 명령줄 도구).
선택적 직렬화: NCache 선택적 직렬화를 허용합니다. 직렬화 불가능으로 표시하려는 클래스의 데이터 멤버를 선택할 수 있습니다. 캐시된 개체의 제외된 속성은 null이거나 기본값(할당된 경우)을 갖습니다. 이 기능은 특정 속성(예: 데이터베이스의 연결 개체)에 대해 캐싱이 필요하지 않은 시나리오에서 유용합니다. 이러한 선택적 직렬화를 통해 프로세스는 더욱 효율적이고 컴팩트해집니다.
Compact Serialization에 대한 세분화된 제어: 이를 위해 다음을 구현할 수 있습니다.
ICompactSerializable
. 이 인터페이스는 컴팩트 직렬화에 대한 보다 세밀한 제어를 제공하며, 비즈니스 요구 사항에 따라 직렬화할 데이터 멤버와 제외할 데이터 멤버를 제어할 수 있습니다.기본 직렬화 지원: NCache 기본 바이너리 직렬화를 지원합니다. 데이터는 캐시에 직렬화된 형식으로 저장되며 클라이언트 기본 직렬화는 .NET 및 Java 클라이언트 모두에 대해 지원됩니다. NCache.
객체 유형에 대한 컴팩트 직렬화 구현
Compact Serialization을 사용하려면 Compact Serialize할 객체 유형을 다음을 통해 구성해야 합니다. NCache 관리 센터. NCache 내부적으로 등록된 클래스의 직렬화/역직렬화를 처리하며 사용자는 이를 명시적으로 코딩할 필요가 없습니다.
중대한
클래스 특성은 직렬화된 순서와 동일한 순서로 역직렬화되어야 합니다. 그렇지 않으면 직렬화된 스트림을 역직렬화할 수 없습니다.
그러나, NCache 또한 명시적인 구현을 허용합니다. ICompactSerializable
인터페이스.
이 인터페이스를 구현하려면 DemoObject 클래스를 구현해야 합니다. Serialize
및 Deserialize
호출될 메소드 NCache 이 객체를 직렬화/역직렬화하는 동안. 이 인터페이스를 구현하는 샘플 코드는 다음과 같습니다.
중대한
매개 변수화된 생성자가 필요한 압축 직렬화용 클래스를 표시하려면 클래스에 기본 생성자가 포함되어 있는지 확인하세요.
사전 조건
- 모든 작업에 필요한 표준 전제 조건에 대해 알아보려면 NCache 서버 측 기능은 다음 페이지를 참조하십시오. 서버 측 API 전제 조건.
- 캐시가 실행 중이어야 합니다.
- 신청서는 다음과 같아야 합니다. 캐시에 연결 작업을 수행하기 전에.
- API 세부 정보는 다음을 참조하세요. ICompact 직렬화 가능, 일련 번호 지정, 역 직렬화, CheckIf직렬화 가능, IGenericTypeProvider.
데모객체 생성
public class DemoObject : ICompactSerializable
{
private string _attribute1;
private int _attribute2;
private bool _attribute3;
public DemoObject()
{ }
public DemoObject(string attrib1, int attrib2, bool attrib3)
{
_attribute1 = attrib1;
_attribute2 = attrib2;
_attribute3 = attrib3;
}
#region ICompactSerializable Members
public void Deserialize(CompactReader reader) {
_attribute1 = reader.ReadObject() as string;
_attribute2 = reader.ReadInt32();
_attribute3 = reader.ReadBoolean();
}
public void Serialize(CompactWriter writer){
writer.WriteObject(_attribute1);
writer.Write(_attribute2);
writer.Write(_attribute3);
}
#endregion
}
제네릭 유형 처리기 구현
NCache Compact Serialization에 일반 유형을 등록할 수도 있습니다. 이를 위해서는 각 유형을 다음을 통해 등록해야 합니다. NCache 관리 센터. "일반 유형 처리기"를 통해 일반 압축 유형을 등록하는 또 다른 방법이 있습니다. 일반 유형 처리기를 사용하면 사용자는 다음을 구현하여 모든 일반 유형을 한 번에 추가할 수 있습니다. IGenericTypeProvider
상호 작용. 이는 사용자가 많은 유형을 등록하려는 경우 많은 시간과 노력을 절약해줍니다.
중대한
인터페이스를 활용하려면 애플리케이션에 다음 네임스페이스를 포함하십시오. Alachisoft.NCache.Runtime.GenericTypesProvider
이를 구현하려면 사용자는 다음을 구현해야 합니다. GetGenericTypes
메소드를 실행하고 원하는 일반 유형을 반환합니다. Type
정렬. 그런 다음 이 클래스 어셈블리를 NCache 관리 센터. 그만큼 NCache Management Center에 채워진 모든 유형을 등록합니다. Type
정렬. 샘플 코드는 다음과 같습니다.
중대한
매개 변수화된 생성자가 필요한 압축 직렬화용 클래스를 표시하려면 클래스에 기본 생성자가 포함되어 있는지 확인하세요.
public class CustomGenericType<T, K, V>
{ }
public class SetGenerics : IGenericTypeProvider
{
Type[] types = new Type[6];
Type[] IGenericTypeProvider.GetGenericTypes()
{
types[0] = typeof(Dictionary<string, Customer>);
types[1] = typeof(List<int>);
types[2] = typeof(CustomGenericType<Employee, Product, Customer>);
types[3] = typeof(CustomGenericType<Employee, Product, int>);
types[4] = typeof(CustomGenericType<Employee, string, byte>);
types[5] = typeof(CustomGenericType<string, Customer, bool>);
return types;
}
public bool CheckIfSerializable(Type type, FieldInfo fieldInfo)
{
// Implement logic
}
}
문제해결
컴팩트 직렬화 예외
직렬화 가능 유형이 등록되지 않은 노드에서 직렬화 예외가 발생할 수 있습니다.
해결 방법
컴팩트 직렬화 가능 등록 클러스터의 모든 노드에 대한 유형입니다.
도 참조
.그물: Alachisoft.NCache.실행 시간 네임 스페이스.