0

我想实现简单的图片网址,就像 facebook 所做的那样。

如果您查看http://developers.facebook.com/docs/reference/api/using-pictures/

你会看到,他们只使用了带有 id 的 photo、even 和 application,但是 event、application 和 photo id 都是三个不同的 table id。

FB图片: http: //graph.facebook.com/331218348435/picture

他们如何知道哪个 id 属于哪个类别(事件、应用程序或照片)?

4

1 回答 1

0

Facebook 中的每个对象都可以有自己的唯一标识符。这意味着,例如,如果 FB 组的 ID 为 42,则应用程序、组或任何其他对象不能具有相同的 ID。这可以允许 Web 应用程序将 ID 直接映射到图片的 URL。

Facebook 正在使用一个 64 位标识符,该标识符很可能是用信息编码的。因此,我认为您不会看到像 42 这样小的 id。信息可以按以下方式编码:

64 bits total
1st 16 bits = Shard ID (where is the object is stored)
2nd 16 bits = Type ID (app, group, person)
Remaining 32 bits = Local unique ID (incremental id for example)

使用一些按位逻辑,您可以从标识符中提取类型。尽管如果您有 ID 到图片 URL 的直接 1 对 1 映射,则可能不需要它。

我实际上并不知道 FB 的后端是如何构建的。以上只是一个示例实现。如果您有具有 32 位 id 的表,您仍然可以使用编码类型转换为 64 位,并使所有标识符无论对象类型如何都是唯一的。

这可能是矫枉过正,特别是如果您在生产中有一个现有的结构。我只是试图解释它是如何做到的,以及 Facebook 是如何做到的。

于 2013-01-17T17:53:56.700 回答