2011-12-07 82 views
3

任何想法在覈心數據字段中存儲Twitter的推特ID(以及其他Twitter數據項ID)的最佳方式是什麼?這是爲了本地緩存推文(以及其他推特數據),並且將用作主要唯一ID來將本地數據與服務器端的數據鏈接起來。也就是說,API返回的任何新的ID值將在本地創建一條記錄,而如果本地數據存儲中存在一個現有的ID,其餘數據將從Twitter API返回的任何地方更新。所以在這個領域會有很多取材。如何將Twitter ID存儲在覈心數據對象中

這是針對Mac OS X/iOS的Core Data庫以及使用的基礎持久性存儲區是SQLite。

正如您所知,目前Twitter defines message IDs as 64-bit unsigned integers。在此基礎上,我可以在本地覺得這些選項店的Twitter ID的:

  1. 作爲64位有符號整數(核心數據不具有一個無符號整型)
  2. 作爲一個字符串
  3. 作爲一個十進制

選項(1)具有兩種危險,我可以預見:

  • 整數溢出(符號溢出),主要解析STR時表示該ID。
  • 如果Twitter溢出64位並擴大其ID值範圍,該怎麼辦?

選項(2)可能效率較低,因爲此字段經常用於提取。

SQLite 3 does not have a native variable-length number type開始,選項(3)可能不會比選項(2)更有效。

理想的選擇可能是將它存儲爲128位無符號整數,這使得它們與UUID一樣唯一,並且不會像字符串一樣大。但不幸的是,在SQLite中沒有128位無符號整數類型,並且在使用該字段作爲獲取密鑰時,底層持久性存儲中本機不支持的任何內容都可能導致問題。

在此先感謝。

回答

3

不會有從64位切換到128位(至少不會像地址空間的任何好理由),即使它已簽名,它仍然留給你63位,其中包括9,000,000,000,000,000,000左右的推文。 Twitter每天獲得2億條推文。即使他們每天有一萬億推文,也需要900萬天的時間才能完成。所以在這方面使用64位肯定是安全的。

+0

+1。當你需要擔心溢出時,你將對代碼做出更多更改。我會去整型數據類型。 – paulbailey

+0

我只看了一下Twitter如何生成他們的ID(Snowflake模式),結果表明他們也只使用63位,兩者中最重要的41位都是一個時間戳,應該從2010年開始有效69年。這是一個很好的使用有符號整數保證。 https://github.com/twitter/snowflake#readme – adib