128 *ビット* の主キーを保存する必要があります:SQL Azure または Azure テーブルを使用する必要がありますか?または、Azure BLOB のリンク リストを使用するだけです

StackOverflow https://stackoverflow.com/questions/3430563

質問

大きな (128 ビット) PK を保存する必要があります。各 int には対応する列がいくつかあります...現在スキーマが定義されていません...そして、将来的にはスキーマを柔軟にしていきたいと考えています。(必要なのは保守的な柔軟性のみです。たとえば、新しい列を時々追加するなど)

現時点では、結合などを行う機能についてはあまり心配していません。主に、ランダムな PK を選択して、次の 10 レコードまで上または下に検索したいと考えています。検索には多くの空白が存在する可能性があるため、上向き検索と下向き検索のコストは異なる場合があります。

このリクエストを処理するのに最適なテクノロジーは何ですか?(トランザクションあたりの) お金と保管スペースを節約できるものに興味があります。パフォーマンスにも興味があります。

おすすめは何ですか?

アップデート

さて、これは何のためにあるのでしょうか?IPv6アドレスのデータ履歴を作成したい。もちろん、これは非常にまばらなテーブルになります...ただし、認識された IP に関する特定の事項を追跡する必要があります。

役に立ちましたか?

解決

Windows Azure テーブルをお勧めしますが、定義されている並べ替え順序は 1 つだけなので、前方と後方の両方で検索するのは困難です。両方のスキャン方向を効率的にサポートするには、各キーを 2 回保存する必要がある場合があります。1 回目は通常の順序で、もう 1 回は逆順 (0xFFF...F - キー) です。

他のヒント

明確にするために、128ビットのキーが必要だと思います(2^128ビットではありません)。

これは Db キーのタイプの選択に関する質問だと考えていますが、Azure の角度がどのような影響を与えるかはわかりません。私の知る限り、それはMS-SQLの上に構築されています。

128 ビットまたは 16 バイトは GUID (UniqueIdentifier) と同じサイズですが、それを使用したくないと思います。ただし、キーとして使用するためのサポートはあります。

直接の選択は binary(16) のようなものですが、それが PK としてどの程度適しているかはわかりません。

これを char(32) 16 進数文字列としてコード化できますが、これは過剰ではありません。

実用性を見積もる場合、重要な要素は、データがどの程度まばらであるか、またはそれ以上であるかどうかです。いくつのアドレスを保存する必要があると予想されますか?

まず第一に、IP V6 アドレスを保存したいと述べたので、2^128 整数キーの前提が間違っています。IP V6 アドレスの長さは 128 ビットです。整数として保存するには、アドレスごとに 128/32、つまり 4 つの 32 ビット整数が必要です。したがって、正しい推定値は、2^128 の可能なアドレス * 4 つの整数、合計 2^128 * 32 ビット整数の 4 つのキーになります。

とにかく、これをバイト単位で表示したいので、2^128 の可能なアドレス * 4 つの整数 * 整数あたり 4 バイト = 5.44 * 10^39 バイトを計算します。後はアンドレアスの計算に従うだけで、さらに多くの結果が得られます...

そうは言っても、IP V6 の考え方は、使用する必要があるよりも多くのアドレスがあるということです。したがって、2^128 付近が今後何年も割り当てられることは非常に疑わしいです。現時点で IP V6 に移行したとしても、せいぜい IP V4 アドレス空間が割り当てられるだけで、他には何も割り当てられません。ただし、IP アドレスの数は毎年増加していますが、それほど多くはありません。

とにかく、スキーマが定義されていないため、何を保存しているのかわからないようです。そのため、Azureテーブルが必要なものである可能性があります。ほとんどの場合、それはキー/値です。IP アドレスごとに、まったく異なるプロパティを保存できます。また、更新/挿入/マージ操作を使用して、別のプロパティを追加/削除することも非常に簡単です。ただし、データに均一性を適用したい場合は、SQL を使用するよりも便利です。確かに、変更が発生した場合はスキーマを変更する必要がありますが、これにより、すべての行 (したがって IP アドレス) に同じデータが含まれるようになります。そうしないと、複数のアプリケーションがある場合に「必須」列/プロパティを省略したり、スペルを間違えたりする可能性があります。しかし、それは本当にあなたが何をしたいかによって異なります。データの整合性を重視しますか、それともプロパティの柔軟性を重視しますか?スキーマを変更する必要がある場合でも、スキーマに列を追加/削除するコマンドがあります。すべての IP アドレスに同じプロパティを保存するか、それぞれに異なるプロパティを含めることができます。特定の IP アドレスのほとんどのプロパティを使用していない場合、Azure Table の方法はおそらく SQL の方法よりもアドレスあたりのストレージの使用量が少ないと思います。したがって、すべてはあなたが何を探しているかによって異なります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top