Indigo
About
- A distributed unique ID generator of using Sonyflake and encoded by Base58.
- ID max length is 11 characters by unsigned int64 max value.
- An Encoder can change your original encoder ;)
Install
$ go get -u github.com/osamingo/indigo
Usage
package main
import (
"log"
"sync"
"time"
"github.com/osamingo/indigo"
)
var g *indigo.Generator
func init() {
t := time.Unix(1257894000, 0) // 2009-11-10 23:00:00 UTC
g = indigo.New(nil, indigo.StartTime(t))
_, err := g.NextID()
if err != nil {
log.Fatalln(err)
}
}
func main() {
wg := sync.WaitGroup{}
wg.Add(100)
for i := 0; i < 100; i++ {
go func() {
defer wg.Done()
id, err := g.NextID()
if err != nil {
log.Fatalln(err)
} else {
log.Println("ID:", id)
}
}()
}
wg.Wait()
}
Benchmark
# Machine: MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports)
# CPU : 2.7 GHz Intel Core i7
# Memory : 16 GB 2133 MHz LPDDR3
goos: darwin
goarch: amd64
pkg: github.com/osamingo/indigo
BenchmarkGenerator_NextID-8 30136 39099 ns/op 7 B/op 1 allocs/op
PASS
Bibliography
- Sonyflake - A distributed unique ID generator inspired by Twitter's Snowflake.
- Base58 - Base58 is a group of binary-to-text encoding schemes used to represent large integers as alphanumeric text.
License
Released under the MIT License.