Read-through, Write-through, Write-behind에서 NCache

NCache 비용이 많이 드는 데이터베이스 이동을 줄이기 위해 애플리케이션 데이터를 캐시하는 .NET용 매우 빠르고 확장 가능한 메모리 내 분산 캐시입니다. 당신이 사용할 수있는 NCache 데이터 스토리지 및 데이터베이스 확장성과 관련된 성능 병목 현상을 제거합니다.

이러한 캐시를 사용하는 가장 일반적인 방법은 애플리케이션이 데이터베이스/데이터 소스에서 데이터를 읽은 다음 이를 캐시하도록 하는 것입니다. 그런 다음 애플리케이션이 데이터베이스에서 이 데이터를 업데이트할 때 캐시도 업데이트하여 캐시가 데이터베이스와 동기화되도록 합니다.

더욱이, NCache 데이터 소스 공급자(읽기/쓰기/뒤에 쓰기)라는 데이터 읽기 및 쓰기를 위한 또 다른 매우 강력한 메커니즘을 제공합니다. NCache 데이터베이스에서 데이터를 읽고 씁니다.

세 가지 방법을 사용할 수 있습니다 NCache 이 맥락에서:

  1. 읽기: 클러스터의 모든 캐시 서버에 상주하고 실행되는 읽기 처리기(Read-through Handler)를 개발합니다. 그런 다음 애플리케이션이 캐시에서 데이터를 가져올 때 NCache 해당 데이터가 캐시에 아직 없는 경우 Read-through 처리기를 호출하여 데이터 원본에서 이 데이터를 읽습니다.
  2. 연속 기입(동기화): 클러스터의 모든 캐시 서버에도 상주하고 실행되는 연속 기입 처리기를 개발합니다. 그리고 애플리케이션이 캐시의 데이터를 업데이트할 때 NCache 먼저 캐시를 업데이트한 다음 Write-through Handler를 호출하여 데이터베이스도 즉시 업데이트합니다. 그리고 애플리케이션은 데이터베이스의 데이터가 업데이트될 때까지 기다립니다.
  3. 비하인드 쓰기(비동기): Write-through 핸들러가 데이터베이스의 데이터 업데이트를 완료할 때까지 애플리케이션이 기다리지 않도록 하려면 Write-behind 옵션을 선택할 수 있습니다. NCache 데이터베이스를 비동기식으로 업데이트하므로 애플리케이션은 데이터베이스 업데이트를 기다릴 필요가 없습니다. 데이터베이스 업데이트는 일반적으로 캐시 업데이트보다 훨씬 느리기 때문에 애플리케이션 속도가 향상됩니다.
그림 1: 서버 측 코드(.NET 버전)
그림 1: 서버 측 코드(.NET 버전)
그림 1: 서버측 코드(Java Edition)
그림 2: 서버측 코드(Java Edition)

Read-through / Write-through / Write-behind의 이점

Read-through, Write-through 및 Write-behind를 사용하면 다음과 같은 몇 가지 이점을 얻을 수 있습니다. NCache.

  1. Write-behind로 쓰기 성능 향상: 데이터베이스 업데이트는 일반적으로 캐시 업데이트보다 훨씬 느립니다. Write-behind를 사용하면 애플리케이션은 캐시만 업데이트하고 계속 진행됩니다. NCache 데이터베이스를 비동기식으로 업데이트합니다. 이렇게 하면 애플리케이션 성능이 상당히 향상됩니다.
  2. Write-behind Throttling으로 데이터베이스 확장성 향상: 애플리케이션이 데이터베이스를 매우 자주 업데이트하는 경우 질식할 가능성이 높습니다. 그러나 Write-behind로 조절을 켜면 NCache 복제를 통해 캐시에서 데이터를 업데이트된 상태로 유지하고 데이터베이스를 천천히 업데이트합니다. 이렇게 하면 데이터베이스의 부담이 많이 줄어듭니다.
  3. 만료 시 캐시 자동 새로 고침: Read-through 핸들러를 개발한 경우 다음을 사용하여 만료 시 자동 새로 고침을 활성화할 수 있습니다. NCache. 이렇게 하면 캐시된 항목이 만료될 때마다 캐시에서 제거하는 대신 NCache Read-through 핸들러를 호출하여 데이터 소스에서 새로운 복사본을 다시 로드합니다.
  4. 데이터베이스 변경 시 캐시 자동 새로 고침: Read-through Handler를 개발한 경우 다음을 사용하여 SQL 종속성/Oracle 종속성에 대한 자동 새로 고침을 활성화할 수 있습니다. NCache. 이렇게 하면 데이터베이스의 해당 데이터가 변경될 때마다 캐시에서 캐시된 항목을 제거하는 대신 NCache Read-through 핸들러를 호출하여 데이터베이스에서 새로운 복사본을 다시 로드합니다.

주요 특징

다음은 Read-through, Write-through 및 Write-behind의 몇 가지 주요 기능입니다. NCache.

  1. 서버측 코드(.NET 또는 Java): .NET 또는 Java를 사용하여 연속 읽기/쓰기 처리기를 개발할 수 있습니다. 클러스터의 모든 캐시 서버에 코드를 개발하고 배포하는 각 핸들러에 대한 인터페이스가 있습니다. NCache 필요할 때 런타임에 호출할 수 있습니다. .NET에서 개발된 모든 처리기는 기본적으로 다음에 의해 호출됩니다. NCache .NET에서도 개발되었기 때문입니다. 그러나 Java로 개발된 핸들러는 다음에 의해 호출됩니다. NCache JNI(Java Native Interface)를 통해
  2. 다중 읽기/쓰기 처리기: 여러 개의 Read-through 및 Write-through 핸들러를 개발하고 이를 등록할 수 있습니다. NCache. 이 경우에는 모두 이름이 지정되며 애플리케이션은 이름을 지정하여 그 중 하나를 요청할 수 있습니다.
  3. 기본 읽기/쓰기 처리기: 명명된 핸들러로 등록된 핸들러가 여러 개 있는 경우 NCache 그 중 하나를 기본 옵션으로 선택할 수 있습니다. 이 기본 핸들러는 애플리케이션이 핸들러 이름을 지정하지 않을 때 사용됩니다.
  4. 읽기 하이라이트
    1. 강제 읽기: NCache 항목이 캐시에 존재하더라도 Read-through를 사용하도록 지시할 수 있는 옵션을 제공합니다(일반적으로 Read-through는 캐시에서 항목을 찾을 수 없는 경우에만 호출됩니다). 이를 통해 데이터베이스에서 데이터가 변경되었을 수 있다고 생각되면 데이터베이스에서 이 항목을 새로 고칠 수 있습니다.
    2. 대량 가져오기 읽기: NCache 애플리케이션이 캐시에서 데이터를 가져올 수 있는 키 목록을 제공할 수 있는 대량 가져오기 API를 제공합니다.
    3. 데이터 구조 읽기(카운터, 사전, 목록, 대기열, 집합): NCache 애플리케이션에 모든 데이터 구조를 가져오는 기능을 제공하고 NCache Read-through 핸들러를 호출하여 데이터베이스에서 이 데이터를 가져옵니다.
  5. 연속 기입 하이라이트
    1. 항목 연속 기입 제거: NCache 또한 키를 사용하여 캐시에서 항목을 제거한 다음 데이터 소스에서 항목을 제거할 수 있는 제거 API를 애플리케이션에 제공합니다.
    2. 일괄 삭제 항목 쓰기: NCache 또한 애플리케이션이 캐시 및 데이터 소스에서 대량으로 제거할 키 목록을 제공할 수 있는 대량 제거 API도 제공합니다.
    3. 일괄 추가/업데이트 연속 기입: NCache 응용 프로그램에서 캐시를 대량으로 추가/업데이트하기 위해 키 및 해당 값 목록을 제공할 수 있도록 하는 대량 추가/업데이트 API를 제공합니다. 연속 기입은 이 상황에서도 작동하며 이러한 항목으로 데이터베이스/데이터 소스를 대량으로 추가/업데이트합니다.
    4. 데이터 구조 연속 쓰기(카운터, 사전, 목록, 대기열 및 세트): NCache 애플리케이션이 모든 데이터 구조를 업데이트할 수 있는 기능을 제공하고 NCache Write-through 처리기를 호출하여 변경 사항으로 데이터베이스를 업데이트합니다.
    5. 비동기 추가/업데이트/제거 연속 기입: NCache API는 비동기 추가/삽입/제거를 제공합니다. Write-through는 이 API를 지원하며 애플리케이션이 해당 API를 호출할 때마다 호출됩니다. 여기. Write-through에서는 애플리케이션이 작업이 완료될 때까지 기다리고 있다고 가정하며 애플리케이션이 비동기적이라는 사실은 클라이언트 API 수준에서만 인식됩니다.
  6. 하이라이트 비하인드 쓰기
    1. 비동기 작업 대기열 복제(고가용성): Write-behind는 캐시를 업데이트하라는 클라이언트의 요청을 수락하고 캐시를 즉시 업데이트하지만 나중에 비동기 실행을 위해 데이터베이스 업데이트를 대기열에 추가합니다. 이 대기열은 캐싱 토폴로지에 따라 항상 둘 이상의 캐시 서버에 복제되어 캐시 서버가 갑자기 다운되더라도 이러한 작업이 손실되지 않도록 합니다.
    2. 스로틀 : Write-behind 비동기 작업에 대한 제한 수준을 지정할 수 있습니다. 이렇게 하면 그것들을 퍼뜨릴 수 있습니다. 기본 조절 수준은 500ops/초입니다.
    3. Write-Behind 모드(비배치 또는 일괄): Non-Batch 모드는 Write-behind 대기열의 각 작업이 개별적으로 실행되는 반면, Batch 모드에서는 여러 작업을 함께 묶어서 집합적으로 실행함을 의미합니다.
    4. 일괄 작업 지연: 두 개의 배치 모드 작업 사이에 지연을 지정할 수 있습니다. 이를 통해 원하는 경우 데이터베이스 업데이트 속도를 늦출 수 있습니다.
    5. 실패한 작업 대기열: Write-behind는 작업이 실패할 경우 모든 작업을 비동기적으로 수행하므로 NCache 실패하지 않은 새로운 작업을 방해하지 않고 다시 실행할 수 있도록 실패한 작업 대기열에 넣을 수 있습니다. 최대 크기와 제거를 지정할 수 있습니다.
  7. 카운터를 통해 연속 쓰기/뒤에 쓰기 모니터링: NCache Write-through/Write-behind에서 발생하는 상황을 모니터링할 수 있는 풍부한 카운터 세트를 제공합니다. 이 카운터는 다음에서 사용할 수 있습니다. NCache 모니터, Windows PerfMon 도구, SNMP 카운터, Prometheus 및 Grafana.

Read-through/Write-through 코드 인터페이스

연속 읽기 및 연속 쓰기 처리기용 코드를 개발하는 과정은 간단합니다. 다음은 두 가지 모두에 대한 인터페이스의 예입니다.

public interface IReadThruProvider
{
	void Init(IDictionary parameters, string cacheId);
	ProviderCacheItem LoadFromSource(string key);
	IDictionary<string, ProviderCacheItem> LoadFromSource(ICollection<string> keys);
	ProviderDataTypeItem<IEnumerable> LoadDataTypeFromSource(string key, DistributedDataType dataType);
	void Dispose();
}
public interface ReadThruProvider extends java.lang.AutoCloseable
{
	void init(java.util.Map<java.lang.String,java.lang.String> parameters, java.lang.String cacheId) throws java.lang.Exception;
	ProviderCacheItem loadFromSource(java.lang.String key) throws java.lang.Exception;
	java.util.Map<java.lang.String,ProviderCacheItem> loadFromSource(java.util.Collection<java.lang.String> keys) throws java.lang.Exception;
	ProviderDataStructureItem loadDataStructureFromSource(java.lang.String key, DistributedDataStructureType distributedDataStructureType) throws java.lang.Exception;
}
public interface IWriteThruProvider
{
	void Init(IDictionary parameters, string cacheId);
	OperationResult WriteToDataSource(WriteOperation operation);
	ICollection<OperationResult> WriteToDataSource(ICollection<WriteOperation> operations);
	ICollection<OperationResult> WriteToDataSource(ICollection<DataTypeWriteOperation> dataTypeWriteOperations);
	void Dispose();
}
public interface WriteThruProvider extends java.lang.AutoCloseable
{
	void init(java.util.Map<java.lang.String,java.lang.String> parameters, java.lang.String cacheId) throws java.lang.Exception;
	OperationResult writeToDataSource(WriteOperation operation) throws java.lang.Exception;
	java.util.Collection<OperationResult> writeToDataSource(java.util.Collection<WriteOperation> operations) throws java.lang.Exception;
	java.util.Collection<OperationResult> writeDataStructureToDataSource(java.util.Collection<DataStructureWriteOperation< dataStructureWriteOperations) throws java.lang.Exception;
}
© 저작권 Alachisoft 2002 - . 판권 소유. NCache 는 Diyatech Corp.의 등록상표입니다.