GithubHelp home page GithubHelp logo

atom's Introduction

Atom

PHP unique ID generator, based on the Twitter snowflake algorithm

APIs:

/*
 * Get the next unique ID
 */
string atom_next_id()

/*
 * Change unique ID to array includes: timestamp, datacenter id and worker id
 */
array atom_explain(string $id)

example:

<?php
$id = atom_next_id();
echo $id;

$info = atom_explain($id);
echo date('Y-m-d H:i:s', $info['timestamp']);
?>

install:

$  cd ./atom
$  phpize
$  ./configure
$  make
$  sudo make install

php.ini configure entries:

[atom]
atom.datacenter = integer
atom.worker = integer
atom.twepoch = uint64

atom's People

Contributors

imaben avatar liexusong 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

atom's Issues

配置项可以由PHP传参数么?

多个数据中心,多个server。要是每个php.ini都配置成不一样的话,感觉不太好。个人觉得通过PHP读取env环境变量,传参好些。

ukey.datacenter = integer
ukey.worker = integer
ukey.twepoch = uint64

PHP服务重启后。获得ID连不上了。

PHP服务重启后。获得ID连不上了。

ukey.worker = 1
ukey.datacenter = 1
这两个配置能详细点吗?比如一个运用复本,同是运行在3台服务器上,随机请求其中一台。怎么获得连续的ID,这个ID写入数据库后看上去不是连续的?

ukey_to_timestamp($id);这个时间在运用中有啥用。能给个例子吗?

compile warning

ukey.c:244:14: warning: comparison between pointer and integer [enabled by default]
if (lock == pid) {

ukey_to_machine 结果不对

在 php.ini 里面配置了 ukey.worker,生成 $id 反解出的机器 id 不对。而且每次都不一样。

编译出错

make 的时候出错,centos 64bit php版本 5.3.3 5.6.3都是一样
In file included from /home/wangyi/ukey-master/ukey.c:33:
/home/wangyi/ukey-master/php_ukey.h:75: error: conflicting types for ‘__uint64_t’
/usr/include/bits/types.h:45: note: previous declaration of ‘__uint64_t’ was here
/home/wangyi/ukey-master/ukey.c: In function ‘ukey_startup’:
/home/wangyi/ukey-master/ukey.c:136: warning: assignment from incompatible pointer type
/home/wangyi/ukey-master/ukey.c:137: warning: assignment from incompatible pointer type
/home/wangyi/ukey-master/ukey.c:147: warning: assignment from incompatible pointer type
/home/wangyi/ukey-master/ukey.c: In function ‘exit_cb’:
/home/wangyi/ukey-master/ukey.c:193: warning: comparison between pointer and integer
make: *** [ukey.lo] Error 1

please add more doc, please

advise to add your blog link

i came this project from your blog, advise to add the blog url to readme file

some question

atom_explain($id) return timestamp / datacenter / worker, but i use the code below to test, datacenter and worker are the same, do you make change to the snowflake algorithm ?

for ($i=0; $i < 20; $i++) {
    $id = atom_next_id(); // is different
    $info = atom_explain($id);
    echo $id . "\t" . date('YmdHis', $info['timestamp']) . "\t" . $info['datacenter'] . "\t" . $info['worker'] . "\n"; // $info are the same
}

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.