如何在Core Data对象中存储Twitter ID

时间:2011-12-07 07:35:05

标签: ios macos database-design core-data twitter

任何想法在核心数据字段中存储Twitter的推文ID(以及其他一般的Twitter数据项ID)的最佳方法是什么?这是本地缓存推文(和其他Twitter数据),并将用作主要的唯一ID,以将本地数据与服务器端的数据链接起来。也就是说,API返回的任何新ID值都将在本地创建记录,而如果本地数据存储中存在现有ID,则其余数据将从Twitter API返回的任何内容进行更新。所以在这个领域会有很多提取。

这适用于Mac OS X / iOS的Core Data库,使用的底层持久存储是SQLite。

您可能已经知道,目前Twitter defines message IDs as 64-bit unsigned integers。基于此,我可以想到这些选项在本地存储Twitter ID:

  1. 作为64位有符号整数(Core Data没有无符号整数类型)
  2. 作为字符串
  3. 作为十进制
  4. 选项(1)有两个我可以预见的危险:

    • 整数溢出(符号溢出),主要在解析ID的字符串表示时。
    • 如果Twitter溢出64位并扩大其ID值范围怎么办?

    选项(2)的效率可能较低,因为此字段经常用于提取。

    SQLite 3 does not have a native variable-length number type以来,选项(3)可能不比选项(2)更有效。

    理想的选择可能是将它存储为128位无符号整数,这使它们像UUID一样唯一,并且不会像字符串那么大。但不幸的是,SQLite中没有128位无符号整数类型,并且当使用该字段作为提取键时,底层持久存储中本身不支持的任何内容都可能导致问题。

    提前致谢。

1 个答案:

答案 0 :(得分:3)

不会有从64位到128位的转换(至少没有像地址空间这样的任何理由),即使它已经签名,它仍会留下63位,大约9,000,000,000,000,000,000鸣叫。 Twitter每天获得2亿条推文。即使他们每天发布一万亿条推文,也需要900万天才能完成。所以在这方面使用64位肯定是安全的。