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 рдФрд░ рдлрд╝реНрд▓рдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдПред