Xxhash: ๋ฒค์น˜๋งˆํฌ์— SipHash ์ถ”๊ฐ€...?

์— ๋งŒ๋“  2019๋…„ 01์›” 03์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Cyan4973/xxHash

๋‚˜๋Š”์ด ์ €์žฅ์†Œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๊ณ  ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘

๊ธฐ๋Šฅ๊ณผ ์„ฑ๋Šฅ ๋ชจ๋‘ ๋งค์šฐ ์ธ์ƒ์ ์ž…๋‹ˆ๋‹ค.

๋ฒค์น˜๋งˆํฌ ์ œํ’ˆ๊ตฐ์— SipHash ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ž์ฒด Wikipedia ํŽ˜์ด์ง€ ๊ฐ€ ์žˆ์œผ๋ฉฐ ๋งŽ์€ ํ”Œ๋žซํผ์—์„œ ๊ตฌํ˜„๋˜๊ณ  ์ผ๋ถ€ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋ฒค์น˜๋งˆํฌ๊ฐ€ ์ ˆ๋ฐ˜์€ ๊ตฌํ˜„์ด๊ณ  ์ ˆ๋ฐ˜์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ๋‘ ํ•ด์‹œ ๊ตฌํ˜„ ๋ชจ๋‘๊ฐ€ ์ถฉ๋ถ„ํžˆ ์„ฑ์ˆ™ํ•˜์—ฌ Ruby์™€ Python์ด SipHash๋ณด๋‹ค xxHash๋ฅผ ์ฑ„ํƒํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ธ์ง€ ๊ถ๊ธˆํ•ดํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์„ฑ์ˆ™ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!

documentation

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์˜ˆ, IMO, SipHash๋Š” ๊ณผ์ž‰์ž…๋‹ˆ๋‹ค. "๋น ๋ฅธ" 1-3 ๋ณ€ํ˜•์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์„ฑ๋Šฅ์€ XXH32์˜ ์ ˆ๋ฐ˜ ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค.

์ ์ ˆํ•œ ํ•ด์‹œ๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  1. ํ•ด์‹œ๋Š” ์‹œ๋“œ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๋“œ๋˜์ง€ ์•Š์€ ํ•ด์‹œ๋Š” ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด์‹œ์—๋Š” ๊ฑฐ์˜ ๋ฌดํ•œํ•œ ์ˆ˜์˜ ์ถฉ๋Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด์‹œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์‰ฌ์šด์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์‹œ๋“œ ๋…๋ฆฝ ์ถฉ๋Œ์ด ์—†์Šต๋‹ˆ๋‹ค. MurmurHash ์‚ฌ๊ฑด์€ ํ‚ค์— ์ƒ๊ด€์—†์ด ์ถฉ๋Œํ•  ๊ฐ’์„ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํฐ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์‹œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋“  ์ƒ๊ด€์—†์ด ํ•ด์‹œ๋Š” ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  3. ๋ถ„ํฌ๊ฐ€ ์ข‹์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฒ„ํ‚ท์ด ๊ณ ๋ฅด๊ฒŒ ์ฑ„์›Œ์ง€๊ณ  2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์œผ๋กœ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ๋ชจ๋“ˆ๋Ÿฌ์Šค๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ๋นจ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์š”์ ์€ ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 64์ฃผ๊ธฐ๋ฅผ ๋ฐ”์ดํŠธ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์™œ ๊ท€์ฐฎ๊ฒŒ ํ• ๊นŒ์š”?

๋ชจ๋“  6 ๋Œ“๊ธ€

๋ฌผ๋ก , ์ข‹์€ ์ œ์•ˆ์ž…๋‹ˆ๋‹ค.

siphash ๋Š” ์ด์‹ ๊ฐ€๋Šฅํ•˜๋ฉฐ(๋‚ด ์ƒ๊ฐ์—๋Š”) ์ด๊ฒƒ์ด ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ์š”๊ตฌ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.
๊ธฐ๋ณธ ํŒ๋งค ํฌ์ธํŠธ๋Š” ์ถฉ๋Œ ์ƒ์„ฑ๊ณผ ๊ด€๋ จํ•˜์—ฌ ํ–ฅ์ƒ๋œ ์•”ํ˜ธํ™” ๋ณดํ˜ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ์›์‹œ ์†๋„์—์„œ๋Š” ๋ถˆ๋ฆฌํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋ฒค์น˜๋งˆํฌ ํ”Œ๋žซํผ์„ ๊ตฌ์ถ•ํ•  ์‹œ๊ฐ„์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์‹ค, ์ด SMHasher fork ์—์„œ ๋ช‡ ๊ฐ€์ง€ ์ดˆ๊ธฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. xxHash๋Š” ์ž‘์€ ์ž…๋ ฅ์˜ ๊ฒฝ์šฐ ์ตœ์†Œ ๋‘ ๋ฐฐ, ๊ธด ์ž…๋ ฅ์˜ ๊ฒฝ์šฐ ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์ด ์ •๋„๋ฉด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์•„์š”...

[SipHash์˜] ์ฃผ์š” ํŒ๋งค ํฌ์ธํŠธ๋Š” ์ถฉ๋Œ ์ƒ์„ฑ๊ณผ ๊ด€๋ จํ•˜์—ฌ ํ–ฅ์ƒ๋œ ์•”ํ˜ธํ™” ๋ณดํ˜ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŠนํžˆ ํ™์ˆ˜ ํ•ด์‹ฑ ๊ณต๊ฒฉ๊ณผ ๊ด€๋ จ๋œ ์œ„ํ—˜ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ๊นจ๋‹ฌ์•˜๋˜ ๊ฒƒ๋ณด๋‹ค ๋” ํฐ ์š”๊ตฌ ์‚ฌํ•ญ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์ด ๊ธ€์„ ์ฝ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ์œ„ํ•ด ์—ฌ๊ธฐ์— ๋†’์€ ์ˆ˜์ค€์˜ ์„ค๋ช… ๊ณผ ๋” ์ž์„ธํ•œ ์„ค๋ช…์ด ์žˆ์Šต๋‹ˆ๋‹ค).

์š”์ฒญ ์‹œ ์ถฉ๋Œ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ด ์Šค๋ ˆ๋“œ ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

์ด ์•ฝ์ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์ค‘ ์ถฉ๋Œ์„ ์ƒ์„ฑํ•˜๊ณ  ํ•ด์‹œ ํ”Œ๋Ÿฌ๋”ฉ ๊ณต๊ฒฉ์œผ๋กœ ์ด์–ด์ง€๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค... ํ•˜์ง€๋งŒ ์ถฉ๋Œ ์ƒ์„ฑ์— ๋Œ€ํ•œ ์ €ํ•ญ์€ ๊ด‘๋ฒ”์œ„ํ•œ ์ฑ„ํƒ์„ ์œ„ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์œผ๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

...

๋ณด์•ˆ ๊ด€๋ จ ์ฐธ๊ณ  ์‚ฌํ•ญ์œผ๋กœ ๋ฉ”์‹œ์ง€์˜ ์ฒ˜์Œ 32๋ฐ”์ดํŠธ๋ฅผ ํŠน์ • ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ๋ชจ๋“  ๋ฒกํ„ฐ๋Š” ์ฒซ ๋ฒˆ์งธ ๋ผ์šด๋“œ ์ดํ›„์˜ ์‹œ๋“œ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์‹œ๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜ ํ•ด์‹œ๋ฅผ ์†์ƒ์‹œํ‚ค๋Š” ๋ฐ ์•…์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋˜๋Œ๋ฆด ์ˆ˜ ์—†๋Š” ์กฐ์ž‘์„ ์‚ฌ์šฉํ•˜๋Š” ๋‚˜๋งŒ์˜ ๋ณ€ํ˜•์„ ๊ฐ€์ง€๊ณ  ๋†€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ xxHash ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ฒค์น˜๋งˆํฌ๋ฅผ ๋งŒ๋“ค ์˜ˆ์ •์ด๋ฏ€๋กœ ๋ชฉ๋ก์— siphash ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ:

๋‚˜๋Š” XXHash์˜ ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ ์˜๊ฐ์„ ๋ฐ›์•„ ๋‚ด ํ”„๋กœ์ ํŠธ/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋น„์Šทํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค(์ €๋Š” ์ด๋ฆ„์„ RiskyHash ๋กœ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

BTW:

์ฝ์„์ˆ˜๋ก ํ•ด์‹œ ๋งต๊ณผ ๊ด€๋ จ๋œ ํ•ด์‹œ ๊ธฐ๋Šฅ "๋ณด์•ˆ"์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์ธ์ƒ์„ ๋œ ๋ฐ›์Šต๋‹ˆ๋‹ค. IMHO, ํ•ด์‹œ ๋งต ๊ตฌํ˜„์€ ํ•ด์‹ฑ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋…ผ๋ฆฌ์— ๋”ฐ๋ผ ๋” ๋น ๋ฅธ ํ•ด์‹ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, IMO, SipHash๋Š” ๊ณผ์ž‰์ž…๋‹ˆ๋‹ค. "๋น ๋ฅธ" 1-3 ๋ณ€ํ˜•์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์„ฑ๋Šฅ์€ XXH32์˜ ์ ˆ๋ฐ˜ ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค.

์ ์ ˆํ•œ ํ•ด์‹œ๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  1. ํ•ด์‹œ๋Š” ์‹œ๋“œ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๋“œ๋˜์ง€ ์•Š์€ ํ•ด์‹œ๋Š” ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด์‹œ์—๋Š” ๊ฑฐ์˜ ๋ฌดํ•œํ•œ ์ˆ˜์˜ ์ถฉ๋Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด์‹œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์‰ฌ์šด์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์‹œ๋“œ ๋…๋ฆฝ ์ถฉ๋Œ์ด ์—†์Šต๋‹ˆ๋‹ค. MurmurHash ์‚ฌ๊ฑด์€ ํ‚ค์— ์ƒ๊ด€์—†์ด ์ถฉ๋Œํ•  ๊ฐ’์„ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํฐ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์‹œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋“  ์ƒ๊ด€์—†์ด ํ•ด์‹œ๋Š” ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  3. ๋ถ„ํฌ๊ฐ€ ์ข‹์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฒ„ํ‚ท์ด ๊ณ ๋ฅด๊ฒŒ ์ฑ„์›Œ์ง€๊ณ  2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์œผ๋กœ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ๋ชจ๋“ˆ๋Ÿฌ์Šค๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ๋นจ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์š”์ ์€ ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 64์ฃผ๊ธฐ๋ฅผ ๋ฐ”์ดํŠธ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์™œ ๊ท€์ฐฎ๊ฒŒ ํ• ๊นŒ์š”?

์— siphash๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/Cyan4973/xxHash/wiki/Performance-comparison

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰