包 core

包 mvc

包 orm

包 form

包 database

包 helper

包 cache

包 webcontrols

包 behavior

包 exception

包 debug

类 - Model_Behavior_Fastuuid

behavior
类层次 Model_Behavior_Fastuuid » QDB_ActiveRecord_Behavior_Abstract
实现的接口
版本 $Id: fastuuid.php 2264 2009-02-21 07:05:30Z dualface $

Behavior_Fastuuid 为模型生成 64 位整数或混淆字符串的不重复 ID

感谢“Ivan Tan|谭俊青 DrinChing (at) Gmail.com”提供的算法。

通常我们习惯使用自增字段来做主键,简单易用。

但在于大规模应用中,使用自增字段将难以实现分布式数据库架构。 并且对数据进行纵向和横向分割(分表分库)造成障碍。 此时最好的解决方案是使用 UUID。

但 UUID 不是每一种数据库都支持,用字符串来模拟效率太低。 并且如果通过 URL 传递,UUID 也显得太长。

fastuuid 插件提供了另一种解决方案: 使用 64bit 整数存储主键,主键由 fastuuid 插件在创建记录时自动生成。

fastuuid 插件支持下列设置:

  • begin_timestamp: 计算 ID 值时,使用的起始日期初值,通常无需指定。

    注意:如果在应用程序使用过程中修改这个设置,可能导致出现重复的 ID 值,

  • suffix_len: 生成的 ID 值附加多少位随机数,默认值为 3。

    即便不附加随机数也不会生成重复 ID,但附加的随机数可以让 ID 更难被猜测。

保护的属性

隐藏继承的属性

属性类型描述定义于
$_settings array 设置 Model_Behavior_Fastuuid
$_meta QDB_ActiveRecord_Meta ActiveRecord 继承类的元信息对象 QDB_ActiveRecord_Behavior_Abstract

公共方法

隐藏继承的方法

方法描述定义于
_before_create() 在数据库中创建 ActiveRecord 对象前调用 Model_Behavior_Fastuuid
genUUID() 生成不重复的 UUID Model_Behavior_Fastuuid
normalizeConfig() 格式化配置 QDB_ActiveRecord_Behavior_Abstract
unbind() 撤销行为插件绑定 QDB_ActiveRecord_Behavior_Abstract

保护的方法

隐藏继承的方法

方法描述定义于
_addDynamicMethod() 为 ActiveRecord 对象添加一个动态方法 QDB_ActiveRecord_Behavior_Abstract
_addStaticMethod() 为 ActiveRecord 类添加一个静态方法 QDB_ActiveRecord_Behavior_Abstract
_addEventHandler() 为 ActiveRecord 对象添加一个事件处理函数 QDB_ActiveRecord_Behavior_Abstract
_setPropGetter() 设置一个属性的 getter 方法 QDB_ActiveRecord_Behavior_Abstract
_setPropSetter() 设置一个属性的 setter 方法 QDB_ActiveRecord_Behavior_Abstract

属性详细说明

$_settings 属性

设置

方法详细说明

_before_create() 方法

public void _before_create($obj)

$obj QDB_ActiveRecord_Abstract
{return}

在数据库中创建 ActiveRecord 对象前调用


genUUID() 方法

public static string genUUID($being_timestamp, $suffix_len)

$being_timestamp int
$suffix_len int
{return} string

生成不重复的 UUID