Google рд╕реЗ C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдФрд░ рдмреА-рдкреЗрдбрд╝реЛрдВ рдкрд░ рдХрдВрдЯреЗрдирд░ рд╕реЗрдЯ рдХрд░реЗрдВ

Google рдХреЗ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ, рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдХреЗ 20% рдореЗрдВ, cpp-btree рд▓рд╛рдЗрдмреНрд░реЗрд░реА (C ++ B-Tree) рдХреЗ рдирд┐рд╢реБрд▓реНрдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рдмрд┐рдЫрд╛ рд╣реБрдЖ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдорд╛рдирдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (STL) рд╕реЗ рдореИрдк, рд╕реЗрдЯ, рдорд▓реНрдЯреАрдореИрдк рдФрд░ рдорд▓реНрдЯреАрд╕реЗрдЯ рдЬреИрд╕реЗ рдХрдВрдЯреЗрдирд░ рд╣реЛрддреЗ рд╣реИрдВред

рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрд╕рдЯреАрдПрд▓ рдореЗрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд▓рд╛рд▓-рдХрд╛рд▓реЗ рдкреЗрдбрд╝реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмреА-рдкреЗрдбрд╝реЛрдВ рдкрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕реАрдкреАрдЯреА-рдмреАрдЯреНрд░реА рдХрдВрдЯреЗрдирд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдореЗрдореЛрд░реА (рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рдкрд░) рдФрд░ рдкреНрд░рджрд░реНрд╢рди (рдХрдВрдЯреЗрдирд░ рдХреЗ рдмрдбрд╝реЗ рдЖрдХрд╛рд░реЛрдВ рдкрд░) рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдмреА-рдЯреНрд░реА рдбрд┐рд╕реНрдХ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ: рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдоред рд▓реЗрдХрд┐рди рд╡рд╣реА рдЧреБрдг рдЬреЛ рд╡рд╣рд╛рдВ рд▓рд╛рдн рджреЗрддреЗ рд╣реИрдВ, рд░рд╛рдо рдХреЗ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рд▓-рдХрд╛рд▓реЗ рдкреЗрдбрд╝ рдХреЗ рдиреЛрдб рдореЗрдВ рдПрдХ рддрддреНрд╡ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рддреАрди рдмрд┐рдВрджреБрдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╕рдВрддреБрд▓рди рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рддрддреНрд╡ рдереЛрдбрд╝реА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдмреА-рдкреЗрдбрд╝реЛрдВ рдкрд░ рдХрдВрдЯреЗрдирд░ рдкреНрд░рддрд┐ рдиреЛрдб рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рд╡реЗ рд╕реВрдЪрдХ рдУрд╡рд░рд╣реЗрдб рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рддреНрд░рд╛ рдореЗрдВ рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВред

рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдмреА-рдкреЗрдбрд╝реЛрдВ рдкрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд▓рд╛рд▓-рдХрд╛рд▓реЗ рдкреЗрдбрд╝реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 50-80% рдХрдо рдЬрдЧрд╣ рд▓реЗрддреА рд╣реИрдВред рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реЗрдЯ / рдореИрдк рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдкреНрд░рддрд┐ рддрддреНрд╡ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдФрд╕рдд рд╕рдВрдЦреНрдпрд╛ рджрд░реНрд╢рд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ рд╕реЗрдЯ <int32_t> рдХрдВрдЯреЗрдирд░ рдХрдИ рдЫреЛрдЯреЗ рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП 16 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдУрд╡рд░рд╣реЗрдб рдмрдирд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ btree_set <int32_t> рдХрдВрдЯреЗрдирд░ рдкреНрд░рддрд┐ рддрддреНрд╡ рдХреЗрд╡рд▓ 1 рдмрд╛рдЗрдЯ рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдмрдирд╛рддрд╛ рд╣реИред

рдЯрд╛рдЗрдкрдбрд╛рд▓рдиреЗрдмреА-рдЯреНрд░реА (32-рдмрд┐рдЯ)рд▓рд╛рд▓-рдХрд╛рд▓рд╛ (32-рдмрд┐рдЯ)рдмреА-рдЯреНрд░реА (64-рдмрд┐рдЯ)рд▓рд╛рд▓-рдХрд╛рд▓рд╛ (64-рдмрд┐рдЯ)
<int32_t> рд╕реЗрдЯ рдХрд░реЗрдВрдХреНрд░рдордмрджреНрдз4.1920.004.4040.00
рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ4.9020.005.1540.00
<int64_t> рд╕реЗрдЯ рдХрд░реЗрдВрдХреНрд░рдордмрджреНрдз8.3924.008.8040.00
рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ9.9624.0010.4740.00
<string> рд╕реЗрдЯ рдХрд░реЗрдВрдХреНрд░рдордмрджреНрдз24.5740.0033.6064.00
рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ29.4940.0040.7464.00
рдорд╛рдирдЪрд┐рддреНрд░ <int32_t, void *>рдХреНрд░рдордмрджреНрдз8.3924.008.8048.00
рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ9.9624.0010.4748.00
рдорд╛рдирдЪрд┐рддреНрд░ <int64_t, void *>рдХреНрд░рдордмрджреНрдз12.6028.0013.2048.00
рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ15.1628.0015.9248.00
рдирдХреНрд╢рд╛ <рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╢реВрдиреНрдп *>рдХреНрд░рдордмрджреНрдз28.6744.0038.1672.00
рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ34.4944.0046.5372.00

рдХреБрдЫ рдмрдбрд╝реЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдкрд░, рдХреИрд╢ рдХреЗ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдкрд╣реБрдВрдЪ рдХреА рдЧрддрд┐ рдореЗрдВ рднреА рдмрдврд╝рдд рд╣реИред рдЧреНрд░рд╛рдлрд╝ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдФрд╕рдд рд╕рдореНрдорд┐рд▓рди рд╕рдордп рджрд┐рдЦрд╛рддрд╛ рд╣реИред


рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "рд░реВрд╕реА рджреЛрд╕реНрддреЛрдВ" рдХреЗ рд▓рд┐рдП, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рд╕рдордЭрд╛рдпрд╛ рдХрд┐ рдЙрд╕рдиреЗ рд╡рд╛рдИ рдЕрдХреНрд╖ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдСрдкрд░реЗрд╢рди рдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, 10 рдорд┐рд▓рд┐рдпрди рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП, рдСрдкрд░реЗрд╢рди рд▓рд╛рд▓-рдХрд╛рд▓реЗ рдкреЗрдбрд╝реЛрдВ рдкрд░ 1.6 рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рд▓реЗрддрд╛ рд╣реИ, рдмреА-рдкреЗрдбрд╝реЛрдВ рдкрд░ 400 рдиреИрдиреЛрд╕реЗрдХрдВрдб рдХреЗ рдЦрд┐рд▓рд╛рдлред рдХрдВрдкреНрдпреВрдЯрд░ рдЗрдВрдЯреЗрд▓ Xeon CPU E5-1650 @ 3.20GHz L1 = 32K, L2 = 256K, L3 = 12M рдХреЗ рд╕рд╛рдеред

рдбреЗрд╡рд▓рдкрд░ cpp-btree рдФрд░ рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ: рдЪреВрдВрдХрд┐ рдмреА-рдЯреНрд░реА рдореЗрдВ рдиреЛрдбреНрд╕ рдбрд╛рд▓рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдореМрдЬреВрджрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

Google рдУрдкрди рд╕реЛрд░реНрд╕ рдмреНрд▓реЙрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ

Source: https://habr.com/ru/post/In169199/


All Articles