osgochina / donkeyid Goto Github PK
View Code? Open in Web Editor NEWphp扩展,64位自增id生成器
php扩展,64位自增id生成器
php版本 PHP 7.0.9
php -v
[1] 49550 segmentation fault php -v
`cp ./.libs/donkeyid.so /home/donkeyid-donkeyid-0.7/donkeyid/modules/donkeyid.so
cp ./.libs/donkeyid.lai /donkeyid-donkeyid-0.7/donkeyid/modules/donkeyid.la
; Local Variables:
Libraries have been installed in:
; Local Variables:
/home/donkeyid-donkeyid-0.7/donkeyid/modules
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.`
我已经在/etc/ld.so.conf加上了路径,make clean之后,重新编译还是错误,但是可以生成so文件,加入到php.ini中,提示“段错误”
嗨,您好。现在需要一个高性能的id生成器,碰巧看到了你的donkeyid。但是我在release里没有看到1.0版本,请问1.0版本稳定了吗?
头文件malloc.h在MacOS的路径为sys/malloc.h,建议加上对系统的判定
README发号算法例图中workId的标识未去掉。
能否提供个ZTS版的拓展编译呢?测试发现在ZTS版本上无法使用该扩展
snowflake 算法最高位不用,所以毫秒计时器用了41个bit,所以最多是2^42 -1,就相当于139年,如果你是用了42个bit的话,那么应该是2^43 -1。就相当于278年了。
在实际运用中.老系统想要迁移到此ID方案时,需要一个依据数据原有时间生成ID的接口.
因为我在设计数据库时,利用新ID的特点,我会省一个数据创建时间字段.因为ID中可以取到.
所以在老系统迁移时就需要一个这样的接口.从时间来获得唯一ID.这样以迁移后,我就能从ID中获得该数据的生成时间.
测试了下 donkeyid 发现 ini_set 设置 node_id 无效啊,帮忙看看,这块因为现在要用到微服务中,希望提供下能动态修改node_id 的方法,这样更方便于使用。
public function http_donkeyid() {
ini_set('donkeyid.node_id',3);
$donkeyid = dk_get_ts_id();
$multi = $this->http_input->get('multi');
if(!empty($multi) && intval($multi) > 0) {
$donkeyid = dk_get_ts_ids($multi);
}
$tsid = dk_get_ts_id();
$donkeyid['tsid'] = $tsid;
$dtid = dk_get_dt_id();
$donkeyid['dtid'] = $dtid;
$donkeyid['dk_parse_ts_id'] = dk_parse_ts_id($tsid);
$donkeyid['iniget'] = ini_get('donkeyid.node_id');
$this->http_output->end($donkeyid);
}
返回结果
{
"0": "149408895300000070",
"1": "149408895300000080",
"2": "149408895300000090",
"3": "149408895300000100",
"4": "149408895300000110",
"5": "149408895300000120",
"6": "149408895300000130",
"7": "149408895300000140",
"8": "149408895300000150",
"9": "149408895300000160",
"tsid": "149408895300000170",
"dtid": "2017050616423334900000001",
"dk_parse_ts_id": {
"time\u0000": "1494088953",
"node_id\u0000": 0,
"sequence\u0000": 17
},
"iniget": "0"
}
在make时出错
[root@DESKTOP-RN8D2NJ donkeyid]# make /bin/sh /root/donkeyid/libtool --mode=compile cc -I. -I/root/donkeyid -I/root/donkeyid/include -I/root/donkeyid/main -I/root/donkeyid -I/opt/remi/php80/root/usr/include/php -I/opt/remi/php80/root/usr/include/php/main -I/opt/remi/php80/root/usr/include/php/TSRM -I/opt/remi/php80/root/usr/include/php/Zend -I/opt/remi/php80/root/usr/include/php/ext -I/opt/remi/php80/root/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /root/donkeyid/donkeyid.c -o donkeyid.lo libtool: compile: cc -I. -I/root/donkeyid -I/root/donkeyid/include -I/root/donkeyid/main -I/root/donkeyid -I/opt/remi/php80/root/usr/include/php -I/opt/remi/php80/root/usr/include/php/main -I/opt/remi/php80/root/usr/include/php/TSRM -I/opt/remi/php80/root/usr/include/php/Zend -I/opt/remi/php80/root/usr/include/php/ext -I/opt/remi/php80/root/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /root/donkeyid/donkeyid.c -fPIC -DPIC -o .libs/donkeyid.o In file included from /root/donkeyid/donkeyid.c:29: /root/donkeyid/php_wrapper.h: In function ‘dk_zend_read_property’: /root/donkeyid/php_wrapper.h:28:37: warning: passing argument 2 of ‘zend_read_property’ from incompatible pointer type -Wincompatible-pointer-types] return zend_read_property(scope,object,name,name_length,silent,&rv); ^~~~~~ In file included from /opt/remi/php80/root/usr/include/php/main/php.h:35, from /root/donkeyid/donkeyid.c:25: /opt/remi/php80/root/usr/include/php/Zend/zend_API.h:404:16: note: expected ‘zend_object *’ {aka ‘struct _zend_object *’} but argument is of type ‘zval *’ {aka ‘struct _zval_struct *’} ZEND_API zval *zend_read_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_bool silent, zval *rv); ^~~~~~~~~~~~~~~~~~ /root/donkeyid/donkeyid.c: In function ‘zif_dk_get_next_ids’: /root/donkeyid/donkeyid.c:233:46: error: expected ‘)’ before ‘TSRMLS_CC’ if (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "l|s",&num, &val, &val_len) == FAILURE) { ^~~~~~~~~ /root/donkeyid/donkeyid.c:233:9: error: too few arguments to function ‘zend_parse_parameters’ if (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "l|s",&num, &val, &val_len) == FAILURE) { ^~~~~~~~~~~~~~~~~~~~~ In file included from /opt/remi/php80/root/usr/include/php/main/php.h:35, from /root/donkeyid/donkeyid.c:25: /opt/remi/php80/root/usr/include/php/Zend/zend_API.h:304:22: note: declared here ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec, ...); ^~~~~~~~~~~~~~~~~~~~~ /root/donkeyid/donkeyid.c: In function ‘zif_dk_get_ts_ids’: /root/donkeyid/donkeyid.c:275:46: error: expected ‘)’ before ‘TSRMLS_CC’ if (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "l|s",&num, &val, &val_len) == FAILURE) { ^~~~~~~~~ /root/donkeyid/donkeyid.c:275:9: error: too few arguments to function ‘zend_parse_parameters’ if (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "l|s",&num, &val, &val_len) == FAILURE) { ^~~~~~~~~~~~~~~~~~~~~ In file included from /opt/remi/php80/root/usr/include/php/main/php.h:35, from /root/donkeyid/donkeyid.c:25: /opt/remi/php80/root/usr/include/php/Zend/zend_API.h:304:22: note: declared here ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec, ...); ^~~~~~~~~~~~~~~~~~~~~ /root/donkeyid/donkeyid.c: In function ‘zif_dk_parse_ts_id’: /root/donkeyid/donkeyid.c:315:46: error: expected ‘)’ before ‘TSRMLS_CC’ if (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "s", &val, &val_len) == FAILURE) { ^~~~~~~~~ /root/donkeyid/donkeyid.c:315:9: error: too few arguments to function ‘zend_parse_parameters’ if (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "s", &val, &val_len) == FAILURE) { ^~~~~~~~~~~~~~~~~~~~~ In file included from /opt/remi/php80/root/usr/include/php/main/php.h:35, from /root/donkeyid/donkeyid.c:25: /opt/remi/php80/root/usr/include/php/Zend/zend_API.h:304:22: note: declared here ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec, ...); ^~~~~~~~~~~~~~~~~~~~~ /root/donkeyid/donkeyid.c: In function ‘zif_dk_parse_id’: /root/donkeyid/donkeyid.c:343:46: error: expected ‘)’ before ‘TSRMLS_CC’ if (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "s", &val, &val_len) == FAILURE) { ^~~~~~~~~ /root/donkeyid/donkeyid.c:343:9: error: too few arguments to function ‘zend_parse_parameters’ if (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "s", &val, &val_len) == FAILURE) { ^~~~~~~~~~~~~~~~~~~~~ In file included from /opt/remi/php80/root/usr/include/php/main/php.h:35, from /root/donkeyid/donkeyid.c:25: /opt/remi/php80/root/usr/include/php/Zend/zend_API.h:304:22: note: declared here ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec, ...); ^~~~~~~~~~~~~~~~~~~~~ make: *** [Makefile:208: donkeyid.lo] Error 1
现在一台机器上启动多个相同的进程,id会有重复。
$data = dk_parse_id("6492052405004271616")
json_encode后是这样的:{"time\u0000":"1547825909854","node_id\u0000":0,"sequence\u0000":0}
导致$data['time'] 获取不到值
我想请教下这种问题我该如何解决,谢谢!
如题, donkeyid是基依赖swoole的吗?还是有swoole版本呢?
PHP Warning: PHP Startup: donkeyid: Unable to initialize module
Module compiled with module API=20131226
PHP compiled with module API=20151012
These options need to match
in Unknown on line 0
Warning: PHP Startup: donkeyid: Unable to initialize module
编译成功后, 追加 extension 后, 出现上述错误信息.
本机节点不应从脚本设置.可放到PHP.INI中
当然.接口是可以留的..用户自己设置就用设置的.否则从PHP.INI中获取.
开多进程获取id会重复
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.