Page History
...
Flush의 경우 비동기로 쌓인 큐를 ,기능에 따라 전송또는 저장하는 액션이 발생할수 있습니다.
BulkInsert
이벤트마다 1건씩 Insert처리하는것은 여러모로 비효율적이며, ORM을 통해 한꺼번에 영속화(메모리->DB저장소)를 한다고 해도 비효율적인 성능이 발생함을 알수가 있습니다.
이벤트는 여러모로 BulkInsert 방식으로 저장가능해야하고, ORM이냐? SQL이냐? 문제는 중요하지 않습니다.
단지 ORM의 도움을 받았을때 더 스마트하고 짧은 코드로 처리가 가능합니다. ( Message Object → Entity Object → 데이터베이스에 영속화 )
모니터링
벌크처리능력을 매트릭스를 통해 처리량을 집계능력을 집계할때 유용할수 있습니다.
샘플은 AKKA 모니터링이 활용되었으며 데이터독과 연동되으며.., 이벤트 카운트를 1씩올리는게아닌
벌크처리된 카운팅을 올리면 되겠습니다.
Code Block | ||
---|---|---|
| ||
if (bulkItems_completed.Count > 0 && IsWriteDB)
{
BatchType = "completed";
EntityFrameworkManager.ContextFactory = context => new BatchRepository(Startup.AppSettings);
using (var context = new BatchRepository(Startup.AppSettings))
{
await context.BulkInsertAsync(bulkItems_completed, options => {
options.BatchSize = BatchSize;
});
Context.IncrementCounter("akka.custom.received1", bulkItems_completed.Count);
}
} |
참고 : Real time performance counters
Note |
---|
어플리케이션에 클러스터가 이미 구성되었다면, 위방법이 유용할수 있지만 위 문제를 해결하기위해 클러스터를 구성하는것은 추천드리지 않습니다. 클러스터로 구성이 안되어있고, 분산된 데이터를 모으는 방법은 카프카를 통해 처리하는것을 권장합니다. |
연관 코드들:
- 배치처리를 포함한 싱글톤 액터 : https://github.com/psmon/AkkaForNetCore/blob/master/AkkaNetCore/Actors/Study/SingleToneActor.cs
- FSM기능을 가진 배치처리 액터 : https://github.com/psmon/AkkaForNetCore/blob/master/AkkaNetCore/Actors/Utils/BatchActor.cs
- 싱글톤 액터 생성하기 : https://github.com/psmon/AkkaForNetCore/blob/025e04a74dba7389cc7675ebaccd403d959a129b/AkkaNetCore/Startup.cs#L184
- 클러스터 설정 : https://github.com/psmon/AkkaForNetCore/blob/master/AkkaNetCore/akka.Development.conf
- 벌크 Insert : https://entityframeworkcore.com/saving-data-bulk-insert