2011-12-07 5 views
3

コアデータフィールドにTwitterのツイートID(およびその他のTwitterデータアイテムID)を保存する最良の方法は何ですか?これは、つぶやき(および他のTwitterデータ)をローカルにキャッシュするためのもので、ローカルデータをサーバー側のデータとリンクするためのプライマリユニーク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. (コアデータは、符号なし整数型を持っていません)主STRを解析

    • 整数オーバーフロー(符号オーバーフロー):10進数

オプション(1)私は予見することができるに、2つの危険性を有していますその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ビットに切り替えることはできません(少なくともアドレススペースのような理由はありません)。ただし、署名されていても、9000,000,000,000,000,000回のツイートが63ビットで残ります。 Twitterは1日に200万件のつぶやきを得る。たとえ1日に1兆個のつぶやきがあったとしても、あふれさせるには900万日かかるでしょう。したがって、64ビットを使用することは確かにその点で安全です。

    +0

    +1。オーバーフローについて心配する必要があるときには、コードをさらに多く変更する必要があります。私は整数データ型を使うつもりです。 – paulbailey

    +0

    私はちょうどTwitterがID(Snowflakeスキーマ)をどのように生成するかを見て、63ビットしか使用していないことが判明しました。最も重要な41ビットは、2010年から69年間有効なタイムスタンプです。符号付き整数を使用するための安心。 https://github.com/twitter/snowflake#readme – adib

    関連する問題