Giter Site home page Giter Site logo

gosnowflake's People

Contributors

cnphpbb avatar guileen avatar zheng-ji avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gosnowflake's Issues

snowflake一种变种实现

感觉snowflake的算法挺强大的。但有时候我发现datacenterid和workerid有时候并不需要这么多位,时间戳的位数和序号的位数要是可调的就好了,就写了个各个位数可调的自己玩玩
https://github.com/liuyongshuai/goutils/tree/master/snowflake
自己测了下,目前暂时没发现问题。
另外,你的那个timeReGen()方法是不是还有改进的余地?

ID在某些情况下重复

window环境下正常,部署到centos下出现了生成ID重复的情况
以下是插入mysql报错日志
[ORM]2018/09/06 11:03:08 -[Queries/default] - [ OK / db.Exec / 0.4ms] - [INSERT INTO pms_groups_permission (id, groupid, permissionid) VALUES (?, ?, ?)] - 257530689124044800, 1468755197309162134, 64815327690625024
[ORM]2018/09/06 11:03:08 -[Queries/default] - [FAIL / db.Exec / 0.2ms] - [INSERT INTO pms_groups_permission (id, groupid, permissionid) VALUES (?, ?, ?)] - 257530689124044800, 1468755197309162134, 42334379363536896 - Error 1062: Duplicate entry '257530689124044800' for key 'PRIMARY'
[ORM]2018/09/06 11:03:08 -[Queries/default] - [FAIL / db.Exec / 0.2ms] - [INSERT INTO pms_groups_permission (id, groupid, permissionid) VALUES (?, ?, ?)] - 257530689124044800, 1468755197309162134, 42334539376234496 - Error 1062: Duplicate entry '257530689124044800' for key 'PRIMARY'
生成ID代码:
func SnowFlakeId() int64 {
iw, _ := goSnowFlake.NewIdWorker(1)
if id, err := iw.NextId(); err != nil {
return 0
} else {
return id
}
}

一些格式优化

Go 我不懂,但是写一些细节的点。。

项目名不要用驼峰命名法

go-snowflake 更好。如果你看看 Go 的 流行仓库,很少会用驼峰命名法。单个单词、全小写是最佳的,其次是带短减号 - 的命名。也可以考虑跟流行的 Go 库使用类似的命名。

格式细节

可以参考 LeanCloud 文案风格指南,里面的建议都非常不错。

这次的排版比以前好太多了,但是 README 里还有一些小问题:

  • 中英文混排的情况,中文间的内容建议用中文标点
  • 第一句英文描述 "According to the Twitter SnowFlake Theory...",这句不是标题,不能全部首字母大写,按正常的句子写就好;另外这句话的表达有点啰嗦,可以改成 "A threadsafe unique ID generator inspired by Twitter SnowFlake theory.",并不需要说是 Go 实现的(个人观点。。)

项目的描述文字也有类似的问题:

image

内容

Description 一段的内容跟标题不符。里面只是说明了 ID 的结构,并不适合叫 Description。而且有一些英文表达的问题,比如:

  • "Sequence is zero default" should be "by default".
  • "when timestamp is the same",首字母没大写
  • 最后一句没有句号结尾。

总体看起来不够通顺,可能会影响人们判断你这个库的质量。

最好有个同步的中文文档,方便推广。

不知道 Go 有无生成 UUID 的标准库?或者其他已经流行的第三方库?可以考虑写个性能/功能对比,方便用户选择。

Endless loop in 'timeReGen'

There's something wrong with the for loop in func (iw *IdWorker) timeReGen(last int64) int64 {...}
There's no loop condition, there's no break or return in the loop's body => it will loop forever!

timeReGen算法有误

当时间戳相同时,会消耗seq,当seq消耗殆尽后,需要在reGen里无限循环至生成新的时间戳,但是在timeReGen里,ts默认等于time.Now().UnixNano(),这个要比使用timeGen生成的数值大1000 * 1000倍,所以这个循环无论如何也会直接break

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.