100만개 item을 가장 빠르게 필터링하는 unique by를 만들어 보자

TL;DR native set, lodash, ImmutableJS의 Set을 이용한 uniqueBy 구현체의 속도/메모리 사용량/CPU 사용량을 봅니다. CPU 사용량이 많아지는 것에 대한 걱정이 없다면 ImmutableJS의 Set을 활용한 uniqueBy를 구현해 사용하세요. 꽤 많은 데이터에 대해서 uniqueBy를 빠르게 돌리고 싶다. 왜 와이 백만개 정도 되는 데이터를 돌릴 필요가 발생했다. 백만개 item 정도 되는 json array에 대한 uniqueBy를 할 필요가 생겼습니다. 실제로 백만개 item에 대해서 테스트는 하기 어려워서 그냥 native set을 이용해 개발했습니다. 개발을 하고 보니, 더 빠른 구조가 있을지 궁금해 졌습니다. chatGPT에 물어보니, TypedArray를 사용해 직접 구현하는 방법과 ImmutableJS를 이용해 구현하는 방법을 제안해 주었습니다. ...

December 25, 2024 · 5 min · 856 words · Crispy

노드에서 배치잡 돌리기(feat. child_process, cluster, worker_threads)

TL;DR node에서 배치잡을 돌리고 싶다. child_process, cluster, worker_thread 비교 io intensive + cpu intensive일 때의 비교 child_process 쓸거 함수별 사용 시점 정리 node에서 배치잡을 돌리고 싶다. 왜와이 쉽고 빠르게 배치작업을 하고 싶다. 일회성 배치작업을 해야 하는 상황이 생겼습니다. 쉽고 빠르게 익숙한 NodeJS로 배치작업을 하고 싶었습니다. io와 cpu 모두 사용하는 작업으로, 딱봐도 오래걸리는 작업이었습니다. 그냥 해보았습니다. 싱글 스레드로 작업을 진행했습니다. Promise.all로 일부 데이터만 작업을 진행했더니 20분이 걸렸습니다. 도저히 전체를 한번에 돌릴 수는 없다고 생각이 들었고, 빠르게 처리하는 방법을 찾게 되었습니다. ...

May 16, 2024 · 5 min · 1037 words · Crispy