2012-07-28 59 views
0

如果您查看Facebook的图形API,看起来好像所有对象都共享相同的ID空间,即使它们位于不同的表中,所有ID也是唯一的。如何在多个表中实现唯一ID

在MySQL中有一个功能可以处理这个问题吗? (如果没有,如何实施的高层次的想法?)

回答

3

你可能想看看UUID()。它返回一个全球唯一的ID,所以你的ID永远不会发生冲突。

将其转换为整数格式,你可以

UNHEX(REPLACE(UUID(),'-','')) 

在一个BINARY(16)列存储。

(来源的变换为整数:在MySQL的参考Nicholas Sherlock's comment

+0

它似乎返回一个字符串,这是如何转换为串行主键? – pyramation 2012-07-28 01:46:15

+0

它实际上是一个以字符串格式返回的128位整数。编辑我的答案,包括方法将其转换为16字节的整数。 – uzyn 2012-07-28 01:54:14

0

如果有一个单一的主数据库服务器,则可以创建具有整数自动递增主键和一个对象类型列的表称为对象。每次创建一个对象时,首先向该Object表中插入一行,获取该id,然后使用该id将行插入到将保存对象信息的任何表中。因此,要创建一个事件:

INSERT INTO Object (object_type) VALUES ('Event') 

获得最后插入的ID,让我们说这是12345

INSERT INTO Event (id, name, location) VALUES (12345, 'Cookout', 'My back yard') 
+0

这当然是可扩展的。 walrii 2012-07-28 01:40:03

+0

所以你如何查询给定ID的对象?遍历所有表? – pyramation 2012-07-28 01:41:35

+0

@pyramation首先查询对象表以查找类型,然后查询相应的表。将最近查询的对象类型保留在memcache中以避免额外的查询。 – 2012-07-28 12:19:13

0

,或者使用一个单一的序列来驱动ID值。

相关问题