• Stars
    star
    3,484
  • Rank 12,780 (Top 0.3 %)
  • Language
    Go
  • License
    MIT License
  • Created over 9 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A distributed unique ID generator inspired by Twitter's Snowflake

Sonyflake

GoDoc Go Report Card

Sonyflake is a distributed unique ID generator inspired by Twitter's Snowflake.

Sonyflake focuses on lifetime and performance on many host/core environment. So it has a different bit assignment from Snowflake. A Sonyflake ID is composed of

39 bits for time in units of 10 msec
 8 bits for a sequence number
16 bits for a machine id

As a result, Sonyflake has the following advantages and disadvantages:

  • The lifetime (174 years) is longer than that of Snowflake (69 years)
  • It can work in more distributed machines (2^16) than Snowflake (2^10)
  • It can generate 2^8 IDs per 10 msec at most in a single machine/thread (slower than Snowflake)

However, if you want more generation rate in a single host, you can easily run multiple Sonyflake ID generators concurrently using goroutines.

Installation

go get github.com/sony/sonyflake

Usage

The function NewSonyflake creates a new Sonyflake instance.

func NewSonyflake(st Settings) *Sonyflake

You can configure Sonyflake by the struct Settings:

type Settings struct {
	StartTime      time.Time
	MachineID      func() (uint16, error)
	CheckMachineID func(uint16) bool
}
  • StartTime is the time since which the Sonyflake time is defined as the elapsed time. If StartTime is 0, the start time of the Sonyflake is set to "2014-09-01 00:00:00 +0000 UTC". If StartTime is ahead of the current time, Sonyflake is not created.

  • MachineID returns the unique ID of the Sonyflake instance. If MachineID returns an error, Sonyflake is not created. If MachineID is nil, default MachineID is used. Default MachineID returns the lower 16 bits of the private IP address.

  • CheckMachineID validates the uniqueness of the machine ID. If CheckMachineID returns false, Sonyflake is not created. If CheckMachineID is nil, no validation is done.

In order to get a new unique ID, you just have to call the method NextID.

func (sf *Sonyflake) NextID() (uint64, error)

NextID can continue to generate IDs for about 174 years from StartTime. But after the Sonyflake time is over the limit, NextID returns an error.

Note: Sonyflake currently does not use the most significant bit of IDs, so you can convert Sonyflake IDs from uint64 to int64 safely.

AWS VPC and Docker

The awsutil package provides the function AmazonEC2MachineID that returns the lower 16-bit private IP address of the Amazon EC2 instance. It also works correctly on Docker by retrieving instance metadata.

AWS VPC is assigned a single CIDR with a netmask between /28 and /16. So if each EC2 instance has a unique private IP address in AWS VPC, the lower 16 bits of the address is also unique. In this common case, you can use AmazonEC2MachineID as Settings.MachineID.

See example that runs Sonyflake on AWS Elastic Beanstalk.

License

The MIT License (MIT)

See LICENSE for details.

More Repositories

1

nnabla

Neural Network Libraries
Python
2,634
star
2

gobreaker

Circuit Breaker implemented in Go
Go
2,606
star
3

flutter-embedded-linux

Embedded Linux embedding for Flutter
C++
995
star
4

flutter-elinux

Flutter tools for embedded Linux (eLinux)
Dart
411
star
5

v8eval

Multi-language bindings to JavaScript engine V8
C++
399
star
6

ai-research-code

Python
316
star
7

model_optimization

Model Compression Toolkit (MCT) is an open source project for neural network model optimization under efficient, constrained hardware. This project provides researchers, developers, and engineers advanced quantization and compression tools for deploying state-of-the-art neural networks.
Python
295
star
8

nnabla-examples

Neural Network Libraries https://nnabla.org/ - Examples
Python
280
star
9

easyhttpcpp

A cross-platform HTTP client library with a focus on usability and speed
C++
152
star
10

sqvae

Pytorch implementation of stochastically quantized variational autoencoder (SQ-VAE)
Python
132
star
11

mapray-js

JavaScript library for Interactive high quality 3D globes and maps in the browser
TypeScript
118
star
12

nmos-cpp

An NMOS (Networked Media Open Specifications) Registry and Node in C++ (IS-04, IS-05)
C++
113
star
13

nnabla-rl

Deep reinforcement learning library built on top of Neural Network Libraries
Python
107
star
14

nnabla-ext-cuda

A CUDA Extension of Neural Network Libraries
Cuda
89
star
15

DiffRoll

PyTorch implementation of DiffRoll, a diffusion-based generative automatic music transcription (AMT) model
Jupyter Notebook
69
star
16

creativeai

CSS
63
star
17

meta-flutter

Yocto recipes for Flutter Engine and custom embedders
BitBake
61
star
18

FxNorm-automix

FxNorm-Automix - Implementation of automatic music mixing systems. We show how we can use wet music data and repurpose it to train a fully automatic mixing system
Python
51
star
19

flutter-elinux-plugins

Flutter plugins for embedded Linux (eLinux)
C++
47
star
20

appsync-client-go

AWS AppSync golang client library
Go
46
star
21

nnabla-nas

Neural Architecture Search for Neural Network Libraries
Python
44
star
22

nnabla-c-runtime

Neural Network Libraries https://nnabla.org/ - C Runtime
C
38
star
23

huis-ui-creator

JavaScript
38
star
24

NDJIR

NDJIR: Neural Direct and Joint Inverse Rendering for Geometry, Lights, and Materials of Real Object
Python
36
star
25

timbre-trap

Code for the paper "Timbre-Trap: A Low-Resource Framework for Instrument-Agnostic Music Transcription"
Python
34
star
26

pyIEOE

Python
31
star
27

nmos-js

An NMOS (Networked Media Open Specifications) Client in Javascript (IS-04, IS-05)
JavaScript
27
star
28

openocd-nuttx

Fork of OpenOCD with NuttX thread support.
C
24
star
29

CLIPSep

Python
23
star
30

pdaf-library

C
22
star
31

cdp-js

Libraries/SDK modules for multi-platform application development
TypeScript
20
star
32

polar-densification

Python
17
star
33

cordova-plugin-cdp-nativebridge

JavaScript
16
star
34

audio-visual-seld-dcase2023

Baseline method for audio-visual sound event localization and detection task of DCASE 2023 challenge
Python
16
star
35

generator-cordova-plugin-devbed

JavaScript
14
star
36

nnc-plugin

Plugins for Neural Network Console (https://dl.sony.com/).
Python
14
star
37

dolp-colorconstancy

Python
11
star
38

typescript-fsa-redux-middleware

Fluent syntax for defining typesafe Redux vanilla middlewares on top of typescript-fsa.
TypeScript
9
star
39

cdn-purge-control-php

Multi CDN purge control library for PHP
PHP
8
star
40

micro-notifier

Simplified Pusher Clone
Go
8
star
41

nnabla-browser

Visualization toolkit for Neural Network Libraries
TypeScript
8
star
42

isren

JavaScript
8
star
43

pixel-guided-diffusion

Fine-grained Image Editing by Pixel-wise Guidance Using Diffusion Models
Python
8
star
44

smarttennissensorsdk

The Smart Tennis Sensor plugs into the end of a tennis racket and records data about all the shots you make throughout a game or practice. With the SDK, you can develop apps for analyzing and presenting that data in real-time.
Java
8
star
45

cdp-cli

Command line tools for generating start point of multi-platform application development (Details: see cdp-js repository)
HTML
7
star
46

custom_layers

Python
7
star
47

mct_quantizers

Python
6
star
48

aibo-development-tutorial

6
star
49

smarttennissensormp4meta

Java
4
star
50

fp-diffusion

Jupyter Notebook
3
star
51

diffusion-timbre-transfer

Jupyter Notebook
3
star
52

node-win-usbdev

C++
3
star
53

evsCluster

Python scripts to process EVS (Event-based vision sensor) data
Python
3
star
54

Instruct3Dto3D-doc

Official documentation of Instruct 3D-to-3D
HTML
2
star
55

nnabla-js

TypeScript
1
star
56

nnabla-doc

1
star