DonkeyID---php扩展-64位自增ID生成器】的更多相关文章

##原理 参考Twitter-Snowflake 算法,扩展了其中的细节.具体组成如下图: 如图所示,64bits 咱们分成了4个部分. 毫秒级的时间戳,有42个bit.能够使用139年,从1970年开始计算,能使用到2109年,当然这些是可以扩展的,可以通知指定起始时间来延长这个日期长度. 自定义节点id,防止多进程运行产生重复id,占位12个bit,能够支持4096个节点.部署的时候可以配置好服务器id; 进程workerid,占位5bit,能够生成32个进程id.根据pid运算获得.(已经…
Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同. Snowflake算法核心 把时间戳,工作机器id,序列号组合在一起. 除了最高位bit标记为不可用以外,其余三组bit占位均可浮动,看具体的业务需求而定.默认情况下41bit的时间戳可以支持该算法使用到2082年,10bit的工作机器id可以支持1023台机器,序列…
Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同. snowflake把时间戳,工作机器id,序列号组合在一起. 除了最高位bit标记为不可用以外,其余三组bit占位均可浮动,看具体的业务需求而定.以下关于此算法的可行性研究 Console.WriteLine() / ( * * 1000.0)); Console.W…
简介 Twitter 早期用 MySQL 存储数据,随着用户的增长,单一的 MySQL 实例没法承受海量的数据,后来团队就研究如何产生完美的自增ID,以满足两个基本的要求: 每秒能生成几十万条 ID 用于标识不同的 记录: 这些 ID 应该可以有个大致的顺序,也就是说发布时间相近的两条记录,它们的 ID也应当相近,这样才能方便各种客户端对记录 进行排序. Twitter-Snowflake算法就是在这样的背景下产生的. 核心 Twitter 解决这两个问题的方案非常简单高效:每一个 ID 都是…
第一题 C++标准中,虚表指针在类的内存结构位置没有规定,不同编译器的实现可能是不一样的.请实现一段代码,判断当前编译器把虚表指针放在类的内存结构的最前面还是最后面.  第二题 在游戏中所有物品的实例都有一个唯一的ID,用于区分这个物品的唯一性.每个物品的ID在物品产生时就被分配了,此后将永远不会改变.每个服务器具有一个服务器ID,不同的服务器ID均不会重复,其值在0-65535之间.请设计一个生成64位的物品ID的算法,算法要求任何时刻.任何不同的服务器中生成的物品ID均不会重复. 第三题 在…
一般情况下强烈建议在CentOS6下面使用YUM配置安装LAMP环境,一些兄弟也很喜欢使用编译的安装方法,个人觉得如果不是对服务器做定制,用yum安装稳定简单,何必去download&make&make install呢. 为centos配置rpmforge及epel源.centos官方的源其实也够用,不过像php的一些扩展如php-mcrypt在官方源中并没有. rpmforge源可以在 http://pkgs.repoforge.org/rpmforge-release/中下载安装,名…
先看phpinfo.php信息 可以看是 PHP5.4 VC9 TS Architecture x86 说明是x86的PHP,虽然系统是64位的,所以还是要下载x86的redis 然后Github下载对应的版本: https://github.com/nicolasff/phpredis/downloads win7 64位 PHP5.4 VC9 TS 绝对可用的下载地址  链接:http://pan.baidu.com/s/1kUyvTYZ 密码:sews 安装 把解压出来的php_igbin…
对于 32 位 Python 的 C 扩展,以前用过 mingW32 编译, 但是 mingW32 不支持 64 位 Python 的 C 扩展编译,详情可见 stackoverflow,这位前辈的大意如下, 以下介绍 Visual Studio 2013 编译 64 位 Python 的 C 扩展步骤: 1)准备 C 文件和包装文件, ExtDemo.c // Purpose: C code, for wrappered. #include <stdio.h> #include <st…
在安装PHP扩展(DLL,SO),除了需要对应的PHP版本外,在WINDOWS还需要区分(TS线程,NTS非线程),如何判断呢? 1.如何判断是NTS还是TS(WINDOWS用户) 看PHP所在目录中的文件名PHP5.DLL(是NTS)PHP5TS.DLL(是TS),这个比较简单粗暴. 2.客户使用的系统是64位的(2008 R2 2012等),如何选PHP扩展? PHP扩展的32位与64位,是指PHP程序而言,非指操作系统.而我们现在使用的PHP程序90%都是x86(32位)的.所以您在安装P…
项目中需要使用runkit模块实现AOP,但是团队成员的开发环境都是Windows,而runkit模块官方没有提供Windows环境下的dll扩展,只能自己编译. 下面是编译过程的分类总结.(操作系统环境为Windows 10 64位中文旗舰版) PHP的编译版本这里的版本指的不是PHP的发行版本,如5.3.7.0,而是指编译时所使用的编译器.程序架构和是否为线程安全.这些信息可以在phpinfo中打印出来.上图中所使用的PHP,是使用Miscrosoft Visual 2012中的MSVC11…