Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon 원시 값을 통해 매칭자를 사용하는 성능이 있습니까?


원시 값을 통해 매칭자를 사용하는 성능이 있습니까?


매치 자와 원시 값 사용의 성능 영향을 비교할 때 사용되는 컨텍스트에 따라 몇 가지 요소가 작용합니다. 자세한 분석은 다음과 같습니다.

일반 프로그래밍

프로그래밍에서 매치자는 종종 Mockito 또는 Googletest와 같은 프레임 워크를 테스트하여 주장이나 스텁 방법을 작성하는 데 사용됩니다. 경기자를 사용할 때는 Mockito [5] [8]에서 'invaliduseofmatchersException'과 같은 오류를 피하기 위해 모든 인수를 매치자가 제공해야합니다. 이 요구 사항은 원시 값을 직접 사용하는 것과 비교하여 추가 기능 호출로 인해 약간 더 많은 오버 헤드로 이어질 수 있습니다.

그러나 성능 차이는 일반적으로 매우 많은 수의 통화 또는 성능 크리티컬 코드 섹션을 다루지 않는 한 일반적으로 무시할 수 있습니다. 대부분의 경우, 경기자가 제공하는 가독성과 유연성은 경미한 성능 비용을 능가합니다.

조회 및 일치 작업

Rust의 'Match'표현식 대 조회 테이블과 같은 조회 작업과 관련된 시나리오에서 성능은 몇 가지 요인에 따라 다를 수 있습니다.

- 분기 예측 : 지점 예측이 잘 작동하면 '매치'표현식이 더 빠를 수 있습니다. 즉, CPU가 다음에 어떤 분기를 할 것인지 정확하게 예측할 수 있습니다. 그러나 패턴이 무작위 인 경우 분기 예측 실패를 피하기 때문에 조회 테이블이 더 빠를 수 있습니다 [3] [6].

- 인라인 및 캐시 : 특히 더 큰 데이터 세트의 경우 인쇄 및 캐싱 할 때 조회 테이블이 더 빠를 수 있습니다. 그러나 '일치'표현은 일반적으로 더 적은 지침을 생성하며 인라인이 미세한 교회 위험을 일으키지 않는 한 더 빠를 수 있습니다 [3] [6].

정규 표현 및 패턴 매칭

패턴 일치에 정규 표현식 (Regex)을 사용하는 경우, 성능은 Regex의 복잡성과 처리중인 데이터의 크기에 크게 영향을받을 수 있습니다. REGEX는 강력하고 유연하지만 지나치게 복잡한 패턴은 역 추적 및 기타 오버 헤드로 인해 성능이 느려질 수 있습니다 [9].

대조적으로, 원시 값 또는 더 간단한 일치 메커니즘을 사용하는 것은 간단한 비교를 위해 더 빠를 수 있지만 Regex의 유연성과 표현성이 부족할 수 있습니다.

관찰 가능성 및 데이터 시스템

높은 카디널리티 데이터 (예 : 로그, 메트릭, 트레이스)를 다루는 시스템에서는 매치 자 또는 복잡한 쿼리를 사용하여 성능 문제가 발생할 수 있습니다. 높은 카디널리티는 효율적인 데이터 저장 및 검색을 위해 설계된 시스템을 압도 할 수있는 많은 고유 한 값을 말합니다 [1]. 이러한 경우 쿼리 최적화 또는보다 효율적인 데이터 구조를 사용하면 성능 영향을 완화 할 수 있습니다.

요약하면, 매칭 및 복잡한 매칭 메커니즘은 유연성과 가독성을 제공하지만 원시 값을 직접 사용하는 것과 비교하여 사소한 성능 오버 헤드를 소개 할 수 있습니다. 그러나 이러한 오버 헤드는 성능 크리티컬 코드 섹션이나 매우 큰 데이터 세트를 처리 할 때는 일반적으로 무시할 수 있습니다. 매치기와 원시 값 사이의 선택은 가독성, 유지 관리 및 성능 요구를 포함한 응용 프로그램의 특정 요구 사항을 기반으로해야합니다.

인용 :
[1] https://last9.io/blog/high-vs-low-cardinality/
[2] https://stats.stackexchange.com/questions/651015/use-smd-or-raw-difference-in-proportions when-comparing-binary-covari
[3] https://users.rust-lang.org/t/why-is-a-lookup-table than-a-match-expression/24233
[4] https://docs.splunk.com/documentation/scs/current/searchreference/conditionalfinctions
[5] https://zsoltfabok.com/blog/2010/08/jmock-versus-mockito/
[6] https://kevinlynagh.com/notes/match-vs-lookup/
[7] https://docs.vespa.ai/en/reference/schema-reference.html
[8] https://www.digitalocean.com/community/tutorials/mockito-argument-matchers-any-eq
[9] https://newrelic.com/blog/how-to-relic/extracting-data-with-regex
[10] http://google.github.io/googletest/reference/matchers.html