1
타사 지속성을 위해 MS SQL Server를 사용하고 있습니다. 내 의도는 데이터베이스에서 데이터 그리드로 데이터를로드하고 일부 계산 (분산)을 수행 한 다음 그 결과를 SQL Server에 다시 작성하는 것입니다. 처리 할 레코드 수는 1 백만이 넘는 레코드이므로 레코드별로 저장되지만 일괄 처리 (예 : 간격 또는 X 밀리 초마다)가 필요하지 않습니다. 나는 put
호출에 중단 점을 넣으면write-through 및 write-behind를 활성화하지만 레코드 당 레코드가 계속 유지됩니다.
int i = 0;
for (ComputePOJO computeItem : computeItems) {
InvoiceItem invoiceItem = calcInvoiceItem();
InvoiceItemKey key = new InvoiceItemKey(invoiceId, contractItemId);
invoiceItem.setId(key);
invoiceItemCache.put(key, invoiceItem);
i++;
if (i % 1000 == 0) {
System.out.printf("> Computed %s InvoiceItems...%n", i);
}
}
하고 레코드를 계산 : 여기
ccfg.setReadThrough(true);
ccfg.setWriteThrough(true);
ccfg.setWriteBehindEnabled(true);
ccfg.setWriteBehindBatchSize(10000);
가 계산 및 캐시에
put
을 수행하는 코드이다 : 여기가 내 노드를 구성한 방법 (SQL Server의
SELECT COUNT(*) FROM InvoiceItem
쿼리) put 호출 전후에 필기체를 사용 가능하게 설정하고 매 10 초마다 쓰기를 구성하더라도 해당 레코드가 즉시 디스크에 기록되었음을 알 수 있습니다. 나는 또한
putAsync
로 시도했지만 같은 결과가 나타납니다.
무엇이 여기에 있습니까?
감사합니다.
이상하게 보입니다. 세척 빈도와 세척 크기의 값을 늘려보십시오. 이 매개 변수를 구성하려면'CacheConfiguration # setWriteBehindFlushSize (int)'(기본값은 10240)와'CacheConfiguration # setWriteBehindFlushFrequency (long)'(기본값은 5 초)를 통해 적절한 값을 제공해야합니다. 전체 캐시 구성으로 질문을 업데이트 해주십시오. – sk0x50
늦게 업데이트되었지만 캐시 구성이 자동 생성 된 코드에서 CacheAtomicityMode.ATOMIC으로 설정되었음을 알았습니다. CacheAtomicityMode.TRANSACTION으로 설정했는데 이제는 데이터베이스에 쓰기 전에 txn.commit까지 기다리고 있습니다. 고맙습니다. – aol