2017-11-27 12 views
0

コレクションデータ構造を定義する上で、どの構造が良い設計または決定であるかを判断するには?これは、その後のデータベースパフォーマンスへのアクセスに影響します。例えばmongodb、パフォーマンスに収集データ構造の影響

場合、このような一つのデータ:

{ 
    _id:'a' 
    index:1, //index 1~n 
    name:'john' 
} 

nが大きい場合、データが大きいと堆積頻繁になることを意味します。

収集データ構造はone dimensional objectになります。

{ 
    _id:'a' 
    index:1, 
    name:'john' 
} 
. 
. 
. 
{ 
    _id:'a' 
    index:99, 
    name:'jule' 
} 

またはcomposite two-dimensional object

{ 
    _id:'a' 
    info:[ 
     {index:1,name:'john'},...,{index:99,name:'jule'} 
    ] 
} 

composite two-dimensional object効果的にデータの数を減らすことができ、しかし、検索方法は、書き込み用に便利ではありませんデータベースの検索や預金の有効性を実際に低下させるかどうかを決定します。

または、データの数がデータベースの有効性に影響する鍵です。

+0

1つのドキュメント内で配列を無限に追加する場合は、私はそれがドキュメントのメモリの再割り当てを引き起こすと考えています。私はまた、mongodbは "干し草から針を見つける"ことが非常に良いと聞いた –

+0

50,000の複合2次元オブジェクトのサイズなどの配列が限られており、50,000データに逆アセンブルされたとします。どちらがいいですか? –

答えて

0

「より良い」とは、ユースケースごとに異なることを意味します。あなたのケースで動作するものは、他のユースケースでは必ずしも機能しないかもしれません。

  1. のMongoDBのドキュメントサイズ制限(16メガバイト):

    一般的には起因して、大きな配列を避けることをお勧めします。

  2. 大きな配列を索引付けすることは、通常、あまり効果がありません。

しかし、これは概観であり、特定の経験則ではありません。データが配列ベースの表現に適していて、16MBの文書サイズに決してぶつかることがないと確信しているなら、その設計は(あなたのユースケースに合わせて)行く方法かもしれません。

あなたはスキーマ設計を始めるためにこれらのリンクが役立つことがあります。

+0

これは、 '_id'を検索するときに、'複合二次元オブジェクト '構造がより適切であることを意味します。'info'を検索すると、一次元オブジェクトがより適切ですか? –

+0

@AlbertChenそれは本当にあなたのアプリケーションをどのように設計するか、そして文書のどの情報があなたにとってより適切かに依存します。右か間違いはありません。投稿したリンクはあなたにアイデアを与えるはずです。 1つは、データの構造を設計する典型的なSQL設計のように、アプリケーション設計によってデータベースがどのように構造化されているかを管理することです。 –

+0

@AlbertChenも、プロダクションにコミットする前に、予想されるワークロードでデザインをテストすることを確認してください。パフォーマンスに関する問題があるかどうかを確認してください。 –

関連する問題