Kui võrrelda matšide kasutamise ja töötlemata väärtuste jõudluse mõju, tulevad mängu mitmed tegurid, sõltuvalt nende kasutamise kontekstist. Siin on üksikasjalik jaotus:
Üldiselt programmeerimine
Programmeerimisel kasutatakse sobivate raamistikute nagu Mockito või Googlesti testimisvõimalusi sageli väidete või tükimeetodite testimisel. Matšide kasutamisel peavad kõik vasterid esitama, et vältida selliseid vigu nagu Mockitos invaliduseofMatcherSexception "[5] [8]. See nõue võib põhjustada lisafunktsioonikõnede tõttu pisut rohkem üldkulusid, võrreldes töötlemata väärtuste otse kasutamisega.
Kuid jõudluse erinevus on tavaliselt tühine, kui te ei tegele väga suure hulga kõnede või tulemuslikkuse kriitiliste koodisektsioonidega. Enamikul juhtudel kaaluvad matšide pakutav loetavus ja paindlikkus üles kõik väiksemad tulemuskulud.
otsingu- ja sobitamisoperatsioonides
Otsingutoiminguid hõlmavad stsenaariumid, näiteks Rusti "Match" väljendite versus otsingutabelid, võib jõudlus varieeruda mitmete tegurite põhjal:
- Filiaali ennustamine: "Vastavad väljendid võivad olla kiiremad, kui haru ennustamine hästi töötab, mis tähendab, et CPU suudab täpselt ennustada, milline haru järgmisena võetakse. Kui muster on juhuslik, võib otsingulaud olla kiirem, kuna see väldib haru prognoosimise ebaõnnestumisi [3] [6].
- Inlinating ja vahemälu: otsingutabelid võivad korralikult sisse ja vahemällu salvestada, eriti suuremate andmekogumite puhul. Kuid "vaste" avaldised loovad üldiselt vähem juhiseid ja need võivad olla kiirem, kui sisestamine põhjustab mikroarhitektuurilisi ohte [3] [6].
regulaarse väljenduse ja mustri sobitamise korral
Regulaarsete avaldiste (regex) kasutamisel mustri sobitamiseks võib jõudlust märkimisväärselt mõjutada regexi keerukus ja töödeldavate andmete suurus. Kuigi Regex on võimas ja paindlik, võivad liiga keerulised mustrid tagantjärele ja muude üldkulude tõttu põhjustada aeglasemat jõudlust [9].
Seevastu töötlemata väärtuste või lihtsamate sobitamismehhanismide kasutamine võib olla sirgjooneliste võrdluste jaoks kiirem, kuid sellel puudub regexi paindlikkus ja ekspressiivsus.
Jälgitavuse ja andmesüsteemide alal
Süsteemides, mis käsitlevad kõrge kardinaalsusega andmeid (nt logid, mõõdikud, jäljed), võivad matšide või keerukate päringute kasutamine põhjustada jõudlusprobleeme. Kõrge kardinaalsus viitab suurele hulgale ainulaadsete väärtustele, mis võib ületada süsteeme, mis on loodud tõhusaks andmete salvestamiseks ja otsimiseks [1]. Sellistel juhtudel võib päringute optimeerimine või tõhusamate andmestruktuuride kasutamine leevendada jõudluse mõju.
Kokkuvõtlikult võib öelda, et kuigi sobitajad ja keerulised sobitamismehhanismid pakuvad paindlikkust ja loetavust, saavad nad toorväärtuste otse kasutamisega võrreldes väikeseid jõudlust. Kuid need üldkulud on tavaliselt tühine, välja arvatud juhul, kui tulemuslikkukriitilistes koodisektsioonides või väga suurte andmekogumitega tegeledes. Kohtujate ja töötlemata väärtuste valik peaks põhinema rakenduse erinõuetel, sealhulgas loetavuse, hooldatavuse ja jõudlusvajaduste põhjal.
Tsitaadid:[1] https://last9.io/blog/high-vs-low-cardinality/
]
]
[4] https://docs.splunk.com/documentation/scs/current/searchReference/ConditionAlftions
[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
]
[9] https://newrelic.com/blog/how-to-realic/excting-log-data-with-regex
[10] http://google.github.io/googlest/reference/matchers.html