일치하는 시스템의 확장 성을 개선하기 위해 노력하면서 GPars 라이브러리를 가지고 놀고 있습니다. 나는 결과를 동시에 처리하는 동안 데이터베이스를 쿼리하고 즉시 데이터베이스를 쿼리 할 수 있기를 원합니다. 병목 현상은 데이터베이스에서 읽는 중입니다. 따라서 데이터베이스를 항상 사용중인 상태로 유지하면서 사용 가능한 경우 비동기 적으로 결과를 처리하고 싶습니다. 액터 프레임 워크가 어떻게 작동하는지에 대한 근본적인 오해가있을 수 있으며 수정 될 수있어서 기쁩니다. 의사 코드에서그루비 액터를 사용하여 데이터베이스의 처리량을 극대화 하시겠습니까?
나는 다음을 수행하려고 해요 :
두 배우, 레코드를 처리하는 데이터베이스에 대해 선택을 실행하기위한 하나의 또 다른 정의.
- queryActor querys 데이터베이스와는 processorActor로 결과를 전송 queryActor 즉시 행위자를 사용하지 않고
아마 간단한 사용 사례를 달성 할 수있는 마무리 processorActor을 기다리지 않고 다시 데이터베이스를 querys
처리 액터는 항상 데이터베이스 쿼리보다 훨씬 빠르며 앞으로 여러 복제본을 동시에 쿼리하고 싶습니다.
def processor = actor {
loop {
react {querySet ->
println "processing recordset"
if (querySet instanceof Object[]) {
MatcherDataRowProcessor matcher = new MatcherDataRowProcessor(matchedRecords, matchedRecordSet);
matchedRecords = matcher.processRecordset(querySet);
reply matchedRecords
}
else {
println 'processor fed nothing, halting processor actor'
stop()
}
}
}
}
def dbqueryer = actor {
println "dbqueryer has started"
while (batchNum.longValue() <= loopLimiter) {
println "hitting db"
Object[] querySet
def thisRuleBatch = new MatchRuleBatch(targetuidFrom, targetuidTo)
thisRuleBatch.targetuidFrom = batchNum * perBatch - perBatch
thisRuleBatch.targetuidTo = thisRuleBatch.targetuidFrom + perBatch
thisRuleBatch.targetName = targetName
thisRuleBatch.whereClause = whereClause
querySet = dao.getRecordSet(thisRuleBatch)
processor.send querySet
batchNum++
}
react { processedRecords ->
processor.send false
}
}
답변 해 주셔서 감사합니다. gpars 라이브러리의 다양한 패턴을보고 있었고 실제로 시도한 첫 번째 패턴은 데이터 흐름 패턴이었습니다. 나는 그 때 그걸로 멀리 가지 못했지만 그 결과를보기 위해 그 구현을 마무리해야합니다. – barrymac