рд░реЙрдХрд░ - рдПрд░реНрд▓рд╛рдВрдЧ рдХреЗ рд▓рд┐рдП рд░реЙрдХрдбрд╕реНрдм рдбреНрд░рд╛рдЗрд╡рд░

рдкрд░рд┐рдЪрдп


рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, sql / nosql рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдкрд╕рдВрдж, рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ KV-рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдмрд╣рд╕ рд╣реЛрддреА рд╣реИред рдЕрднреА рдЖрдк рдЬреЛ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрдЯреНрдЯрд╛рдиреА рдореИрдиреБрдЕрд▓ рдпрд╛ рдЖрдВрджреЛрд▓рди рдирд╣реАрдВ рд╣реИред рдореИрдВ рдПрд░рд▓рд╛рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдирдЖрдИрдПрдл рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдЕрдВрддрд░рд┐рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдпрд╣ рд▓реЗрдЦ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рд░реЙрдХрдбрдм рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдбреНрд░рд╛рдЗрд╡рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред


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


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВ:


  1. рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛
  2. рдЙрддреНрдкрд╛рджрдХрддрд╛
  3. рд╕реБрд░рдХреНрд╖рд╛ (рд╡рд┐рд╣рд┐рдд рдЕрд░реНрде рдореЗрдВ)
  4. рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛:
    • рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА kv рдлрд╝рдВрдХреНрд╢рди
    • рд╕реНрддрдореНрдн рдкрд░рд┐рд╡рд╛рд░
    • рд▓реЗрди-рджреЗрди
    • рдбреЗрдЯрд╛ рд╕рдВрдкреАрдбрд╝рди
    • рд▓рдЪреАрд▓реЗ рднрдВрдбрд╛рд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди
  5. рдиреНрдпреВрдирддрдо рдХреЛрдб рдЖрдзрд╛рд░

рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди


  • erocksdb , leofs Developers рдХрд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИред рдлрд╛рдпрджреЗ рдореЗрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрдиреБрдореЛрджрди рд╢рд╛рдорд┐рд▓ рд╣реИред рд╡рд┐рдкрдХреНрд╖ рджреНрд╡рд╛рд░рд╛ - рдПрдХ рдкреБрд░рд╛рдирд╛ рдХреЛрдб рдЖрдзрд╛рд░ рдФрд░ рд▓реЗрди-рджреЗрди рдХреА рдХрдореАред рдпрд╣ рдбреНрд░рд╛рдЗрд╡рд░ 4.13 рдЪрдЯреНрдЯрд╛рдиреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
  • рд░реЙрдХрд╕реА рдХреЗ рдкрд╛рд╕ рдХрдИ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдХрдореА, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рд╕рднреА рдЪрд╛рдмрд┐рдпрд╛рдБ рдФрд░ рдореВрд▓реНрдп рддрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╣ рдХреЗрд╡рд▓ рдХрдИ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реБрдП рдЬреЛ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреВрд╕рд░реЗ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред
  • рдПрд░рд▓рд╛рдВрдЧ-рд░реЙрдХреНрд╕рдбрдм рдПрдХ рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╡рд┐рдХрд╛рд╕ 2014 рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ рдерд╛ред рдЬреИрд╕реЗ erocksdb рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ C / C ++ рдФрд░ рд╡реНрдпрд╛рдкрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рдХреЛрдб рдЖрдзрд╛рд░ рд╣реИред рдпрд╣ рдбреНрд░рд╛рдЗрд╡рд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЕрднреНрдпрд╛рд╕ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред

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


рдШреБрдорд╛рд╡


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


рдПрдкреАрдЖрдИ рдЕрд╡рд▓реЛрдХрди


рдмреЗрд╕ рдУрдкрдирд┐рдВрдЧ


рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рджреЛ рдореЛрдб рдореЗрдВ рд╕рдВрднрд╡ рд╣реИ:


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


    • рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдПрдХ рдорд╛рдирдХ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


      rocker:open_default(<<"/project/priv/db_default_path">>) -> {ok, Db}. 

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


    • рдпрд╛ рддреЛ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
       {ok, Db} = rocker:open(<<"/project/priv/db_path">>, #{ create_if_missing => true, set_max_open_files => 1000, set_use_fsync => false, set_bytes_per_sync => 8388608, optimize_for_point_lookup => 1024, set_table_cache_num_shard_bits => 6, set_max_write_buffer_number => 32, set_write_buffer_size => 536870912, set_target_file_size_base => 1073741824, set_min_write_buffer_number_to_merge => 4, set_level_zero_stop_writes_trigger => 2000, set_level_zero_slowdown_writes_trigger => 0, set_max_background_compactions => 4, set_max_background_flushes => 4, set_disable_auto_compactions => true, set_compaction_style => universal }). 

  2. рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЯреВрдЯред рдХреБрдВрдЬреА рдХреЛ рддрдерд╛рдХрдерд┐рдд рдХреЙрд▓рдо рдкрд░рд┐рд╡рд╛рд░реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдкрд░рд┐рд╡рд╛рд░ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рд╕рднреА рд╕реНрддрдВрдн рдкрд░рд┐рд╡рд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдЦреЛрд▓рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
     {ok, Db} = case rocker:list_cf(BookDbPath) of {ok, CfList} -> rocker:open_cf_default(BookDbPath, CfList); _Else -> CfList = [], rocker:open_default(BookDbPath) end. 

рдЖрдзрд╛рд░ рд╣рдЯрд╛рдирд╛


рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ rocker:destroy(Path). рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ rocker:destroy(Path). рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдзрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛рдмреЗрд╕ рд░рд┐рдХрд╡рд░реА


рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рдлрд▓рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, rocker:repair(Path) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ rocker:repair(Path) рд╡рд┐рдзрд┐ред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ 4% рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


  1. рдлрд╝рд╛рдЗрд▓ рдЦреЛрдЬ
  2. Wal рдЦреЗрд▓рдХрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
  3. рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓реЗрдВ
  4. рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд░рд┐рдХреЙрд░реНрдб

рдПрдХ рдХреЙрд▓рдо рдкрд░рд┐рд╡рд╛рд░ рдмрдирд╛рдирд╛


 Cf = <<"testcf1">>, rocker:create_cf_default(Db, Cf) -> ok. 

рдХреЙрд▓рдо рдкрд░рд┐рд╡рд╛рд░ рдХреЛ рд╣рдЯрд╛рдиреЗ


 Cf = <<"testcf1">>, rocker:drop_cf(Db, Cf) -> ok. 

CRUD рдСрдкрд░реЗрд╢рди


рдореБрдЦреНрдп рдбреЗрдЯрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐

 rocker:put(Db, <<"key">>, <<"value">>) -> ok. 

рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

 rocker:get(Db, <<"key">>) -> {ok, <<"value">>} | notfound 

рдкреНрд░рдореБрдЦ рдбреЗрдЯрд╛ рд╡рд┐рд▓реЛрдкрди

 rocker:delete(Db, <<"key">>) -> ok. 

рд╕реАрдПрдл рдореЗрдВ рдореБрдЦреНрдп рдбреЗрдЯрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐

 rocker:put_cf(Db, <<"testcf">>, <<"key">>, <<"value">>) -> ok. 

рд╕реАрдПрдл рдХреЗ рднреАрддрд░ рдкреНрд░рдореБрдЦ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐

 rocker:get_cf(Db, <<"testcf">>, <<"key">>) -> {ok, <<"value">>} | notfound 

рд╕реАрдПрдл рдХреБрдВрдЬреА рдирд┐рдХрд╛рд▓рдирд╛

 rocker:delete_cf(Db, <<"testcf">>, <<"key">>) -> ok 

iterators


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЪрдЯреНрдЯрд╛рдиреЛрдВ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЪрд╛рдмрд┐рдпреЛрдВ рдХрд╛ рднрдВрдбрд╛рд░рдг рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Rocksdb рдореЗрдВ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ ( рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ):


  • рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗред рд░реЙрдЯрд░ рдЗрдЯреЗрдЯрд░ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ {'start'}
  • рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдВрдд рд╕реЗ: {'end'}
  • рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреБрдВрдЬреА рдЖрдЧреЗ рд╕реЗ рд╢реБрд░реВ {'from', Key, forward}
  • рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреБрдВрдЬреА рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ {'from', Key, reverse}

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпреЗ рдореЛрдб рдХреЙрд▓рдо рдкрд░рд┐рд╡рд╛рд░реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред


рдПрдХ рдЗрдЯрд░реЗрдЯрд░ рдмрдирд╛рдПрдБ

 rocker:iterator(Db, {'start'}) -> {ok, Iter}. 

рдЖрдИрдЯрд░ рдХреА рдЬрд╛рдБрдЪ

 rocker:iterator_valid(Iter) -> {ok, true} | {ok, false}. 

CF рдХреЗ рд▓рд┐рдП рдПрдХ Iterator рдмрдирд╛рдирд╛

 rocker:iterator_cf(Db, Cf, {'start'}) -> {ok, Iter}. 

рдПрдХ рдЙрдкрд╕рд░реНрдЧ Iterator рдмрдирд╛рдирд╛

рдЙрдкрд╕рд░реНрдЧ рдЗрдЯрд┐рдЯрд░ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рддреЗ рд╕рдордп рдЙрдкрд╕рд░реНрдЧ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


 {ok, Db} = rocker:open(Path, #{ prefix_length => 3 }). 

"рдПрдПрдП" рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЗрдЯрд░реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 {ok, Iter} = rocker:prefix_iterator(Db, <<"aaa">>). 

CF рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрд╕рд░реНрдЧ Iterator рдмрдирд╛рдирд╛

рдкрд┐рдЫрд▓реЗ рдЙрдкрд╕рд░реНрдЧ prefix_length рдХреЗ рд╕рдорд╛рди, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрддрдВрдн рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ prefix_length рдЖрд╡рд╢реНрдпрдХ рд╣реИ


 {ok, Iter} = rocker:prefix_iterator_cf(Db, Cf, <<"aaa">>). 

рдЕрдЧрд▓реА рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

рд╡рд┐рдзрд┐ рдЕрдЧрд▓реЗ рдХреБрдВрдЬреА / рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрд╛ рдареАрдХ рд╣реИ рдЕрдЧрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИред


 rocker:next(Iter) -> {ok, <<"key">>, <<"value">>} | ok 

рд▓реЗрди-рджреЗрди


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


 {ok, 6} = rocker:tx(Db, [ {put, <<"k1">>, <<"v1">>}, {put, <<"k2">>, <<"v2">>}, {delete, <<"k0">>, <<"v0">>}, {put_cf, Cf, <<"k1">>, <<"v1">>}, {put_cf, Cf, <<"k2">>, <<"v2">>}, {delete_cf, Cf, <<"k0">>, <<"v0">>} ]). 

рдЙрддреНрдкрд╛рджрдХрддрд╛


рдЖрдк рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдореЗрдВ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 30k RPS рдФрд░ рдореЗрд░реА рдорд╢реАрди рдкрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП 200k RPS рджрд┐рдЦрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдЖрдк рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП 15-20k RPS рдФрд░ рд▓рдЧрднрдЧ 1 Kb рдкреНрд░рддрд┐ рдХреБрдВрдЬреА рдХреЗ рдФрд╕рдд рдбреЗрдЯрд╛ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 120k RPS рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ 1 рдмрд┐рд▓рд┐рдпрди рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред


рдирд┐рд╖реНрдХрд░реНрд╖


рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд░реЙрдХрд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдиреЗ рд╣рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдмрдврд╝рд╛рдиреЗ рдФрд░ рдкреБрдирд░рд╛рд░рдВрдн рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рдпреЗ рд▓рд╛рдн рдиреНрдпреВрдирддрдо рд╡рд┐рдХрд╛рд╕ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд╛рдЧрдд рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдереЗред


рдЦреБрдж рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдХрд┐ рдПрд░реНрд▓рд╛рдВрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╖реНрдЯрддрдо рд╣реИред Erlang рдЬрд▓реНрджреА рдФрд░ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХреЛрдб рдХреЗ 95% рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ Rust рд╕рдордЧреНрд░ рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд╕реЗ рд╕рдордЭреМрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрд╡рд░реЛрдзрди рдХреЛ 5% рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддрд╛ / рдЬреЛрдбрд╝рддрд╛ рд╣реИред


рдкреБрдирд╢реНрдЪ рдПрд░реНрд▓рд╛рдВрдЧ рдореЗрдВ рдЖрд░реНрдмрд┐рдЯрд╡рд░реНрд╕-рд╕рдЯреАрдХ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рд▓рд┐рдП рдПрдирдЖрдИрдПрдл рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЕрдиреБрднрд╡ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд░реБрд╕реНрдд рдкрд░ рдПрдирдЖрдИрдПрдл рд╡рд┐рд╖рдп рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ?

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


All Articles