-
Notifications
You must be signed in to change notification settings - Fork 0
CRDT 성능 벤치마크 결과
Boseok Kang edited this page Dec 6, 2022
·
1 revision
-
node v16.16.0
-
ubuntu 20.04
-
11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz
-
NODE_OPTIONS='--max-old-space-size=8192'
-
Operation 10, 100, 1000, 10000개에 대한 연산 속도 테스트 진행
- 30분 이상 기다려도 결과가 나오지 않는 경우 1000개까지만 테스트 수행
- 배열 구조
- 실수 인덱스 기반
**1. LocalInsert 벤치마크**
1-1) 모든 입력이 항상 문서 맨 뒤에 들어갈 경우
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.37688199803233147ms' │
│ 100 │ '0.09775499999523163ms' │
│ 1000 │ '0.6821510009467602ms' │
│ 10000 │ '5.489331997931004ms' │
└─────────┴─────────────────────────┘
1-2) 모든 입력이 항상 문서 맨 앞에 들어갈 경우
┌─────────┬────────────────────────┐
│ (index) │ Values │
├─────────┼────────────────────────┤
│ 10 │ '0.4206710010766983ms' │
│ 100 │ '1.6867779977619648ms' │
│ 1000 │ '23.745200999081135ms' │
│ 10000 │ '2405.3365989997983ms' │
└─────────┴────────────────────────┘
1-3) 모든 입력이 랜덤하게 들어갈 경우
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.25732799991965294ms' │
│ 100 │ '0.46730099990963936ms' │
│ 1000 │ '3.7738320007920265ms' │
│ 10000 │ '17.947806999087334ms' │
└─────────┴─────────────────────────┘
**2. LocalInsertRange 벤치마크**
2-1) 모든 입력(3개를 한번에 입력)이 맨 뒤에 들어갈 경우
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.17020700126886368ms' │
│ 100 │ '0.12176800146698952ms' │
│ 1000 │ '1.0001230016350746ms' │
│ 10000 │ '10.598441001027822ms' │
└─────────┴─────────────────────────┘
2-2) 모든 입력(3개를 한번에 입력)이 맨 앞에 들어갈 경우
┌─────────┬────────────────────────┐
│ (index) │ Values │
├─────────┼────────────────────────┤
│ 10 │ '0.0905969999730587ms' │
│ 100 │ '0.7079380005598068ms' │
│ 1000 │ '71.19633500277996ms' │
│ 10000 │ '7988.76493300125ms' │
└─────────┴────────────────────────┘
2-3) 모든 입력(3개를 한번에 입력)이 랜덤하게 들어갈 경우
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.10565999895334244ms' │
│ 100 │ '0.19121100008487701ms' │
│ 1000 │ '3.1562880016863346ms' │
│ 10000 │ '530.6779890023172ms' │
└─────────┴─────────────────────────┘
**3. LocalDelete 벤치마크**
3-1) 하나씩 삭제할 경우
* 여러 개 삭제하는 경우는 하나씩 삭제하는 경우와 동작이 같아 테스트하지 않는다.
* index는 존재하는 문자의 갯수와도 같음
┌─────────┬──────────────────────────┐
│ (index) │ Values │
├─────────┼──────────────────────────┤
│ 10 │ '0.042027998715639114ms' │
│ 100 │ '0.11502000316977501ms' │
│ 1000 │ '0.8740459978580475ms' │
│ 10000 │ '55.308225996792316ms' │
└─────────┴──────────────────────────┘
**4. remoteInsert 벤치마크**
* 현재 양쪽 모두 OperationCount만큼 인덱스가 존재하고 있음
4-1) 모든 remote 요청이 문서 맨 앞에 들어갈 경우
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.2167770005762577ms' │
│ 100 │ '0.31554200127720833ms' │
│ 1000 │ '9.717081002891064ms' │
│ 10000 │ '74.41391700133681ms' │
└─────────┴─────────────────────────┘
4-2) 모든 remote 요청이 문서 중앙에 들어갈 경우
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.10500399768352509ms' │
│ 100 │ '0.13489600270986557ms' │
│ 1000 │ '83.4189710021019ms' │
│ 10000 │ '105513.33468900248ms' │
└─────────┴─────────────────────────┘
4-3) 모든 remote 요청이 랜덤하게 들어갈 경우 (Worst)
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.0837399996817112ms' │
│ 100 │ '0.15085000172257423ms' │
│ 1000 │ '98.94992200285196ms' │
│ 10000 │ '128999.8691470027ms' │
└─────────┴─────────────────────────┘
**5. remoteInsertRange 벤치마크**
5-1) 모든 입력(3개를 한번에 입력)이 맨 앞에 들어갈 경우
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.13947099819779396ms' │
│ 100 │ '0.2381419986486435ms' │
│ 1000 │ '2.4346319995820522ms' │
│ 10000 │ x │
└─────────┴─────────────────────────┘
5-2) 모든 입력(3개를 한번에 입력)이 문서 중앙에 들어갈 경우
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.0921889990568161ms' │
│ 100 │ '0.24760700017213821ms' │
│ 1000 │ '121.90978699922562ms' │
│ 10000 │ x │
└─────────┴─────────────────────────┘
5-3) 모든 입력(3개를 한번에 입력)이 랜덤하게 들어갈 경우 (Worst)
┌─────────┬────────────────────────┐
│ (index) │ Values │
├─────────┼────────────────────────┤
│ 10 │ '0.0691090002655983ms' │
│ 100 │ '0.4747540019452572ms' │
│ 1000 │ '295.60797299817204ms' │
│ 10000 │ x │
└─────────┴────────────────────────┘
**6. remoteDelete 벤치마크**
6-1) 한 글자를 삭제하는 요청이 Index번 들어올 경우
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.13987799733877182ms' │
│ 100 │ '9.888956002891064ms' │
│ 1000 │ '8682.433924999088ms' │
│ 10000 │ x │
└─────────┴─────────────────────────┘
**7. remoteDeleteRange 벤치마크**
7-1) index만큼의 문자를 한번에 삭제하는 요청이 들어올 경우 (요청은 단 1번)
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.18517900258302689ms' │
│ 100 │ '21.421654999256134ms' │
│ 1000 │ '13864.950212996453ms' │
│ 10000 │ x │
└─────────┴─────────────────────────┘
- 연결리스트 구조
- WOOT 알고리즘 기반
- uuid 인덱스
**1. LocalInsert 벤치마크**
1-1) 모든 입력이 항상 문서 맨 뒤에 들어갈 경우
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.25197600200772285ms' │
│ 100 │ '0.5542510002851486ms' │
│ 1000 │ '12.69480399787426ms' │
│ 10000 │ '1402.8910789974034ms' │
└─────────┴─────────────────────────┘
1-2) 모든 입력이 항상 문서 맨 앞에 들어갈 경우
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.27826299890875816ms' │
│ 100 │ '0.27261799946427345ms' │
│ 1000 │ '2.572216000407934ms' │
│ 10000 │ '16.85019099712372ms' │
└─────────┴─────────────────────────┘
1-3) 모든 입력이 랜덤하게 들어갈 경우
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.23609299957752228ms' │
│ 100 │ '0.3446579985320568ms' │
│ 1000 │ '9.23089700192213ms' │
│ 10000 │ '1567.9071290008724ms' │
└─────────┴─────────────────────────┘
**2. LocalInsertRange 벤치마크**
2-1) 모든 입력(3개를 한번에 입력)이 맨 뒤에 들어갈 경우
┌─────────┬────────────────────────┐
│ (index) │ Values │
├─────────┼────────────────────────┤
│ 10 │ '0.2208320014178753ms' │
│ 100 │ '1.4140230007469654ms' │
│ 1000 │ '111.9740609973669ms' │
│ 10000 │ '23545.804039999843ms' │
└─────────┴────────────────────────┘
2-2) 모든 입력(3개를 한번에 입력)이 맨 앞에 들어갈 경우
┌─────────┬────────────────────────┐
│ (index) │ Values │
├─────────┼────────────────────────┤
│ 10 │ '0.167238000780344ms' │
│ 100 │ '0.5629189983010292ms' │
│ 1000 │ '4.481447000056505ms' │
│ 10000 │ '50.17932200059295ms' │
└─────────┴────────────────────────┘
2-3) 모든 입력(3개를 한번에 입력)이 랜덤하게 들어갈 경우
┌─────────┬────────────────────────┐
│ (index) │ Values │
├─────────┼────────────────────────┤
│ 10 │ '0.1647530011832714ms' │
│ 100 │ '1.3897559978067875ms' │
│ 1000 │ '56.82490799948573ms' │
│ 10000 │ '17792.42253500223ms' │
└─────────┴────────────────────────┘
**3. LocalDelete 벤치마크**
3-1) 하나씩 삭제할 경우
* 여러 개 삭제하는 경우는 하나씩 삭제하는 경우와 동작이 같아 테스트하지 않는다.
* index는 존재하는 문자의 갯수와도 같음
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.10416899994015694ms' │
│ 100 │ '0.35487500205636024ms' │
│ 1000 │ '15.132245998829603ms' │
│ 10000 │ '1676.544725999236ms' │
└─────────┴─────────────────────────┘
**4. remoteInsert 벤치마크**
* 현재 양쪽 모두 OperationCount만큼 인덱스가 존재하고 있음
4-1) 모든 remote 요청이 문서 맨 앞에 들어갈 경우
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.14322800189256668ms' │
│ 100 │ '0.09084499999880791ms' │
│ 1000 │ '0.31654199957847595ms' │
│ 10000 │ '4.483823999762535ms' │
└─────────┴─────────────────────────┘
4-2) 모든 remote 요청이 문서 중앙에 들어갈 경우
┌─────────┬──────────────────────────┐
│ (index) │ Values │
├─────────┼──────────────────────────┤
│ 10 │ '0.07863299921154976ms' │
│ 100 │ '0.017465002834796906ms' │
│ 1000 │ '0.5406839996576309ms' │
│ 10000 │ '12.807269997894764ms' │
└─────────┴──────────────────────────┘
4-3) 모든 remote 요청이 랜덤하게 들어갈 경우 (Worst)
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.3057530000805855ms' │
│ 100 │ '0.09170899912714958ms' │
│ 1000 │ '0.4828599989414215ms' │
│ 10000 │ '4.328271999955177ms' │
└─────────┴─────────────────────────┘
**5. remoteInsertRange 벤치마크**
5-1) 모든 입력(3개를 한번에 입력)이 맨 앞에 들어갈 경우
┌─────────┬──────────────────────────┐
│ (index) │ Values │
├─────────┼──────────────────────────┤
│ 10 │ '0.023224998265504837ms' │
│ 100 │ '0.03811799734830856ms' │
│ 1000 │ '0.5335679985582829ms' │
│ 10000 │ '4.851831998676062ms' │
└─────────┴──────────────────────────┘
5-2) 모든 입력(3개를 한번에 입력)이 문서 중앙에 들어갈 경우
┌─────────┬──────────────────────────┐
│ (index) │ Values │
├─────────┼──────────────────────────┤
│ 10 │ '0.039618998765945435ms' │
│ 100 │ '0.02907399833202362ms' │
│ 1000 │ '0.7040100023150444ms' │
│ 10000 │ '6.956870999187231ms' │
└─────────┴──────────────────────────┘
5-3) 모든 입력(3개를 한번에 입력)이 랜덤하게 들어갈 경우 (Worst)
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.06398800015449524ms' │
│ 100 │ '0.05734200030565262ms' │
│ 1000 │ '0.933278001844883ms' │
│ 10000 │ '6.884066000580788ms' │
└─────────┴─────────────────────────┘
**6. remoteDelete 벤치마크**
6-1) 한 글자를 삭제하는 요청이 Index번 들어올 경우
┌─────────┬─────────────────────────┐
│ (index) │ Values │
├─────────┼─────────────────────────┤
│ 10 │ '0.21628399938344955ms' │
│ 100 │ '0.33590999990701675ms' │
│ 1000 │ '13.710884001106024ms' │
│ 10000 │ '1969.9382079988718ms' │
└─────────┴─────────────────────────┘
**7. remoteDeleteRange 벤치마크**
7-1) index만큼의 문자를 한번에 삭제하는 요청이 들어올 경우 (요청은 단 1번)
┌─────────┬──────────────────────────┐
│ (index) │ Values │
├─────────┼──────────────────────────┤
│ 10 │ '0.01687299832701683ms' │
│ 100 │ '0.008090998977422714ms' │
│ 1000 │ '0.06868700310587883ms' │
│ 10000 │ '1.1141079999506474ms' │
└─────────┴──────────────────────────┘
© 2022 부스트캠프로5행시해보겠습니다