1

我正在创建一个集中的票务服务器来分发唯一的 32 位 INT id。我有一个可以在我的应用程序中调用的函数,它接受实体/表的参数,例如 getPrimaryKey('user')。我通过这篇博文从 Flickr 得到了这个想法:

http://code.flickr.com/blog/2010/02/08/ticket-servers-distributed-unique-primary-keys-on-the-cheap/

我们最终将在多个 MySQL 数据库中分片我们的数据,我希望启动并运行此代码作为概念证明。

我的问题是在 Doctrine 中使用此功能的最佳方法是什么?显然,使用上面的票据服务器,我需要指定我的 Doctrine 模型都不包含自动递增的主键。

是否有一个我可以扩展的 Doctrine_Model 方法,该方法将在将新记录插入数据库之前使用我的 getPrimaryKey 方法检索主键?如果不是,我应该从我的应用程序中的另一个地方处理这个问题吗?

理想情况下,我希望在使用 Doctrine 关系时使用上述方法生成 id,例如:

$user = new User():  
$user->name = 'Bob';  
$user->Phonenumbers[]->number = '555-5555';  
$user->save();  

此外,这种情况的另一面是从特定分片中选择数据。我目前的想法是像这样维护每个分片上包含的键范围的主列表(忽略每个分片的少量行):

分片A user_id 1-1000
分片 B user_id 1001-2000 分片
C user_id 2001-3000

然后我可以调用 getShard($table_name, $primary_key) 之类的方法来获取分片,并可能将我的 Doctrine 连接切换到该特定分片。特定用户/实体的相关数据很可能驻留在同一个分片上,因此我不太担心跨多个分片的关系。不过,这可能是一种可能性,因此也非常感谢有关此问题的任何指导。

4

0 回答 0