
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.19 | 20.00 | 4.40 | 40.00 |
| рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ | 4.90 | 20.00 | 5.15 | 40.00 |
<int64_t> рд╕реЗрдЯ рдХрд░реЗрдВ | рдХреНрд░рдордмрджреНрдз | 8.39 | 24.00 | 8.80 | 40.00 |
| рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ | 9.96 | 24.00 | 10.47 | 40.00 |
<string> рд╕реЗрдЯ рдХрд░реЗрдВ | рдХреНрд░рдордмрджреНрдз | 24.57 | 40.00 | 33.60 | 64.00 |
| рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ | 29.49 | 40.00 | 40.74 | 64.00 |
рдорд╛рдирдЪрд┐рддреНрд░ <int32_t, void *> | рдХреНрд░рдордмрджреНрдз | 8.39 | 24.00 | 8.80 | 48.00 |
| рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ | 9.96 | 24.00 | 10.47 | 48.00 |
рдорд╛рдирдЪрд┐рддреНрд░ <int64_t, void *> | рдХреНрд░рдордмрджреНрдз | 12.60 | 28.00 | 13.20 | 48.00 |
| рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ | 15.16 | 28.00 | 15.92 | 48.00 |
рдирдХреНрд╢рд╛ <рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╢реВрдиреНрдп *> | рдХреНрд░рдордмрджреНрдз | 28.67 | 44.00 | 38.16 | 72.00 |
| рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ | 34.49 | 44.00 | 46.53 | 72.00 |
рдХреБрдЫ рдмрдбрд╝реЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдкрд░, рдХреИрд╢ рдХреЗ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдкрд╣реБрдВрдЪ рдХреА рдЧрддрд┐ рдореЗрдВ рднреА рдмрдврд╝рдд рд╣реИред
рдЧреНрд░рд╛рдлрд╝ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдФрд╕рдд рд╕рдореНрдорд┐рд▓рди рд╕рдордп рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "рд░реВрд╕реА рджреЛрд╕реНрддреЛрдВ" рдХреЗ рд▓рд┐рдП, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рд╕рдордЭрд╛рдпрд╛ рдХрд┐ рдЙрд╕рдиреЗ рд╡рд╛рдИ рдЕрдХреНрд╖ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдСрдкрд░реЗрд╢рди рдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, 10 рдорд┐рд▓рд┐рдпрди рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП, рдСрдкрд░реЗрд╢рди рд▓рд╛рд▓-рдХрд╛рд▓реЗ рдкреЗрдбрд╝реЛрдВ рдкрд░ 1.6 рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рд▓реЗрддрд╛ рд╣реИ, рдмреА-рдкреЗрдбрд╝реЛрдВ рдкрд░ 400 рдиреИрдиреЛрд╕реЗрдХрдВрдб рдХреЗ рдЦрд┐рд▓рд╛рдлред рдХрдВрдкреНрдпреВрдЯрд░ рдЗрдВрдЯреЗрд▓ Xeon CPU E5-1650 @ 3.20GHz L1 = 32K, L2 = 256K, L3 = 12M рдХреЗ рд╕рд╛рдередрдбреЗрд╡рд▓рдкрд░ cpp-btree рдФрд░ рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ: рдЪреВрдВрдХрд┐ рдмреА-рдЯреНрд░реА рдореЗрдВ рдиреЛрдбреНрд╕ рдбрд╛рд▓рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдореМрдЬреВрджрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ
рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
Google рдУрдкрди рд╕реЛрд░реНрд╕ рдмреНрд▓реЙрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ