如果您查看Facebook的图形API,看起来好像所有对象都共享相同的ID空间,即使它们位于不同的表中,所有ID也是唯一的。如何在多个表中实现唯一ID
在MySQL中有一个功能可以处理这个问题吗? (如果没有,如何实施的高层次的想法?)
如果您查看Facebook的图形API,看起来好像所有对象都共享相同的ID空间,即使它们位于不同的表中,所有ID也是唯一的。如何在多个表中实现唯一ID
在MySQL中有一个功能可以处理这个问题吗? (如果没有,如何实施的高层次的想法?)
你可能想看看UUID()
。它返回一个全球唯一的ID,所以你的ID永远不会发生冲突。
将其转换为整数格式,你可以
UNHEX(REPLACE(UUID(),'-',''))
在一个BINARY(16)
列存储。
(来源的变换为整数:在MySQL的参考Nicholas Sherlock's comment)
如果有一个单一的主数据库服务器,则可以创建具有整数自动递增主键和一个对象类型列的表称为对象。每次创建一个对象时,首先向该Object表中插入一行,获取该id,然后使用该id将行插入到将保存对象信息的任何表中。因此,要创建一个事件:
INSERT INTO Object (object_type) VALUES ('Event')
获得最后插入的ID,让我们说这是12345
INSERT INTO Event (id, name, location) VALUES (12345, 'Cookout', 'My back yard')
所以你如何查询给定ID的对象?遍历所有表? – pyramation 2012-07-28 01:41:35
@pyramation首先查询对象表以查找类型,然后查询相应的表。将最近查询的对象类型保留在memcache中以避免额外的查询。 – 2012-07-28 12:19:13
,或者使用一个单一的序列来驱动ID值。
它似乎返回一个字符串,这是如何转换为串行主键? – pyramation 2012-07-28 01:46:15
它实际上是一个以字符串格式返回的128位整数。编辑我的答案,包括方法将其转换为16字节的整数。 – uzyn 2012-07-28 01:54:14