2011-07-09 9 views
0

私のシステムの各ユーザーは連絡先を持つことができます。各連絡先には、名前、住所、Eメール、電話番号などの詳細があります。連絡先をAzureテーブルにどのように保存しますか?

Azureテーブルにこの連絡先を保存することをお勧めしますか?

  • 特定のフィールド(メールや電話など)を検索するにはどうすればよいですか?
  • 特定のユーザーに所属する連絡先のみを取得するにはどうすればよいですか?
  • フィールドで連絡先を並べ替えるにはどうすればよいですか?

答えて

1

連絡先がテーブルストレージに保存するのに適していると思いますが、所有者でパーティションを作成して複数の所有ユーザー全体で検索や集計を行う必要がない場合に限ります。このため

一つの可能​​性のあるデザインは、次のとおりです。

  • パーティションキーと行キーのためのいくつかのユニークなフィールドとして所有しているユーザーとの接触一度店が、各行内の列としてフィールドを持ちます。

特定のフィールド(メールや電話など)を検索するにはどうすればよいですか?任意の単一のパーティションに特に大きなまたは遅くすべきではない - それは、そのパーティション内のスキャンを行います - あなたは、パーティション内を検索するためのテーブルのストレージを求めることができ

特定のユーザーに所属する連絡先を取得するにはどうすればよいですか?

  • これは、パーティション・キーによって、単純なクエリのみ

どのように私は、フィールドでの連絡先を並べ替えるんでしょうか?テーブル記憶から

  • すべての結果は(のPartitionKey、のrowKey)ので、ユーザーの連絡先をソートすることにより、ソートされている、あなたはそれらのすべてを照会して、ウェブや労働者の中にそれらをソートする必要があります役割。

他のデザインは、もちろん可能です -

例えば各連絡先を複数のテーブルに複数の行に格納することができます。これにより、テーブル記憶域内でソート順を事前に作成できます。

ユーザーごとに個別のパーティションキーの代わりに別のテーブルを使用することができます。これにより、ユーザーを削除するときにそのユーザーに属するテーブル全体を削除できるという利点があります。


注...これに対してテーブルストレージを使用することは可能ですが、現実には、SQL Azureでほぼ終わりに近づいているようですが、これははるかに強力で予測可能です(IMO)。チームがセカンダリインデックスを作成すると、私のデータをより多くのものに使用したくなるかもしれません。

+0

これは質問の主要な部分に答えていますが、それは大きな部分のオープンパフォーマンスを残しています。オブジェクト内を決して検索しないでください。それらを直列化して、あなたがそれらを逆直列化するまであなたに知らせないでください。パラダイムキーによる検索は、索引付けされているので高速です...それを覚えておいてください! –

+0

私は、あなたがパフォーマンスについて気をつける必要があることに同意します、Anze - しかし、 "決してあなたのオブジェクトの中で検索しない"と同意しないでください。パーティション当たりのコンタクト数が少ない(例えば、<1000)と仮定し、この場合の検索が常に単一のパーティションキーを指定すると仮定すると、フィールドによる検索は許容可能なパフォーマンスを与えるはずである。 – Stuart

関連する問題