рдЧреЛрд▓рдЧрдкреНрдкреЗ рдкрд░ 500 рдкрдВрдХреНрддрд┐ рдХрд╛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд╛рд▓реЗрдВ

pudge рдЧреЛ рд╕реНрдЯреИрдВрдбрд░реНрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХреБрдВрдЬреА / рдорд╛рди рд╣реИред

рдЫрд╡рд┐

рдореИрдВ рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рд╕реЗ рдореВрд▓рднреВрдд рдЕрдВрддрд░реЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред

рд░рд╛рдЬреНрдпрд╡рд┐рд╣реАрди

pudge.Set("../test/test", "Hello", "World") 

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

Typefree

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

  type Point struct { X int Y int } for i := 100; i >= 0; i-- { p := &Point{X: i, Y: i} db.Set(i, p) } var point Point db.Get(8, &point) log.Println(point) 

рдХреНрд╡реЗрд░реА рд╕рд┐рд╕реНрдЯрдо

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

  keys, _ := db.Keys(7, 2, 0, true) 

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб SQL рдХреНрд╡реЗрд░реА рдХреЗ рд╕рдорд╛рди рд╣реИ:

 select keys from db where key>7 order by keys asc limit 2 offset 0 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЫрдБрдЯрд╛рдИ рдХреБрдВрдЬреА "рдЖрд▓рд╕реА" рд╣реИред рджреВрд╕рд░реА рдУрд░, рдЪрд╛рдмрд┐рдпрд╛рдБ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЬрд▓реНрджреА рдЪрд▓рддреА рд╣реИред

рд╕рдорд╛рдирддрд╛

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

 func write(c *gin.Context) { var err error group := c.Param("group") counter := c.Param("counter") db, err := pudge.Open(group, cfg) if err != nil { renderError(c, err) return } _, err = db.Counter(counter, 1) if err != nil { renderError(c, err) return } c.String(http.StatusOK, "%s", "ok") } 

рдЗрдВрдЬрди

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

рд╕реНрдерд┐рддрд┐

рдкреВрдЬрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдШрд░ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдФрд░ рдЙрддреНрдкрд╛рджрди рджреЛрдиреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЧреНрд░рд╛рдлрд╝ рдкрд░ - рдкреБрдЬ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ http рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 20 ms рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ



рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреВрдЬрд╛ рдкреВрд░реНрдг рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдореЛрдб рдореЗрдВ рдЪрд╛рд▓реВ рд╣реЛрддреА рд╣реИ, рдФрд░, fsync рдХреЗ рд╕рдордп, рдорд╣рддреНрд╡рдкреВрд░реНрдг (20 рдПрдордПрд╕ рд╕реЗ рдЕрдзрд┐рдХ) рджреЗрд░реА рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдкреНрд░рддрд┐рд╢рдд рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдирд╣реАрдВ рд╣реИрдВред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреГрд╖реНрда рдкрд░ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреВрдЬрд╛ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд▓рд┐рдВрдХ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЧрддрд┐

рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЖрдк рдЕрдиреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдкреБрдЬ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдкрд░реАрдХреНрд╖рдг 1


 Number of keys: 1000000 Minimum key size: 16, maximum key size: 64 Minimum value size: 128, maximum value size: 512 Concurrency: 2 
pogreb
goleveldb
рдкреЗрдВрдЪ
badgerdb
рдореЛрдЯрд╛ рдЖрджрдореА
рдореВрд░реНрдЦ
рд╣рд▓рд╡рд╛ (рдореЗрдо)
1M (рдкреБрдЯ + рдЧреЗрдЯ), рд╕реЗрдХрдВрдб
187
38
126
34
23
23
2
1 рдПрдо рдкреБрдЯ, рдСрдкреНрд╕ / рд╕реЗрдХ
5336
34,743
8054
33,539
47,298
46,789
439,581
1M Get, ops / sec
1782423
98406
499,871
220,597
499,172
445,783
1652069
FileSize рдПрдордмреА
568
357
552
487
358
358
358

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

рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдВрдХ:

  • Pogreb Go рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рднрд╛рд░реА-рднрд░рдХрдо рд╡рд░реНрдХрд▓реЛрдб рдХреЗ рд▓рд┐рдП рдПрдВрдмреЗрдбреЗрдб рдХреА-рд╡реИрд▓реНрдпреВ рд╕реНрдЯреЛрд░
  • Go рдореЗрдВ Goleveldb LevelDB рдХреБрдВрдЬреА / рдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ред
  • рдмреЛрд▓реНрдЯ рдЧреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рдХреБрдВрдЬреА / рдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ред
  • Go рдореЗрдВ badgerdb рдлрд╛рд╕реНрдЯ рдХреА-рд╡реИрд▓реНрдпреВ DB
  • рд╢реБрджреНрдз рдЧреЛ рдореЗрдВ рдирд┐рдореНрди рд╕реНрддрд░ рдХреА рдХреБрдВрдЬреА / рдореВрд▓реНрдп рдХреА рджреБрдХрд╛рди
  • Go рдХреА рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдлрд╛рд╕реНрдЯ рдПрдВрдб рд╕рд┐рдВрдкрд▓ рдХреА / рд╡реИрд▓реНрдпреВ рд╕реНрдЯреЛрд░

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

рдЖрдЧреЗ рдХрд╛ рд╡рд┐рдХрд╛рд╕

  • рд▓реЗрди-рджреЗрдиред рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрд╡рдд: рд░реЛрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде, рдкреВрд▓ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред
  • рдкреНрд░рдореБрдЦ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ (рдЬреИрд╕реЗ memcache / cassandra рдЖрджрд┐ рдореЗрдВ TTL)
  • рдПрдХ рд╕рд░реНрд╡рд░ рдХреА рдХрдореАред рдореМрдЬреВрджрд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдореЗрдВ рдкреВрдЬрд╛ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрд▓рдЧ рд╕рд░реНрд╡рд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВред
  • рдореЛрдмрд╛рдЗрд▓ рд╕рдВрд╕реНрдХрд░рдгред Android, iOS рдФрд░ рдлрд╝реНрд▓рдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдПред

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


All Articles