Page History
Info |
---|
앞장에서 싱글톤 클러스터를 이용하여, 무수히 발생하는 이벤트를 액터 메시지로 모아서 데이터 인입에 성능 효율을 올려보았습니다. 여기서 데이터 인입 성능 효율을 위해 사용된 ORM 벌크 인서트를 자세하게 살펴보겠습니다. 벌크 인서트는 10만개의 데이터를 단 5초이내에 인입을 할것입니다. |
테스트 코드
이제부터 테스트코드가 스스로 설명하기때문에 자세한 설명을 생략하겠습니다.
Code Block | ||
---|---|---|
| ||
public class BulkInsertTest : TestKitXunit { private AppSettings appSettings; public BulkInsertTest(ITestOutputHelper output) : base(output) { Setup(); } public void Setup() { appSettings = new AppSettings() { DBConnection = "server=localhost;port=33061;database=showa_searchakkadb;user=root;password=root;" }; } [Theory] [InlineData(50000, 100, 10)] //5만개의 데이터 인입에 소요시간은 10초이내여야한다. (배치사이즈:한번처리하는데 최대수:튜닝) public void BulkSppedTest(int daatSize,int batchSize, int cutoff) { var bulkItems_reseverd = new List<MessageReseved>(); for(int i = 0; i < daatSize; i++) { var addData = new MessageReseved() { Seq = i.ToString(), no = i, Message = "TestMessage" + i, updateTime = DateTime.Now }; bulkItems_reseverd.Add(addData); } Within(TimeSpan.FromSeconds(cutoff), () => { EntityFrameworkManager.ContextFactory = context => new BatchRepository(appSettings); using (var context = new BatchRepository(appSettings)) { context.BulkInsertAsync(bulkItems_reseverd, options => { options.BatchSize = batchSize; }).Wait(); } }); } } |
...
- src : https://github.com/psmon/AkkaForNetCore/blob/master/AkkaNetCoreTest/Repositories/BulkInsertTest.cs
- bulk insert를 처리하기위한 Entity Expand Lib : https://entityframeworkcore.com/saving-data-bulk-insert
- 싱글톤 클러스터 액터를 사용하여 데이터 인입지점 모으기 : SingleTon Cluster Actor