3

ユーザー、アカウント、およびトランザクションに関する情報を保存する小さなアプリを開発しています。ユーザーは多くのアカウント (おそらく 10 未満) を持ち、アカウントには多くのトランザクション (おそらく 1000 件) があります。ドキュメントを読むと、次のように埋め込むことが最善の方法であることが示唆されているようです...

{
"username": "joe",
"accounts": [
    {
        "name": "account1",
        "transactions": [
            {
                "date": "2013-08-06",
                "desc": "transaction1",
                "amount": "123.45"
            },
            {
                "date": "2013-08-07",
                "desc": "transaction2",
                "amount": "123.45"
            },
            {
                "date": "2013-08-08",
                "desc": "transaction3",
                "amount": "123.45"
            }
        ]
    },
    {
        "name": "account2",
        "transactions": [
            {
                "date": "2013-08-06",
                "desc": "transaction1",
                "amount": "123.45"
            },
            {
                "date": "2013-08-07",
                "desc": "transaction2",
                "amount": "123.45"
            },
            {
                "date": "2013-08-08",
                "desc": "transaction3",
                "amount": "123.45"
            }
        ]
    }
 ]
}

私の質問は... トランザクションのリストがドキュメント内でおそらく 1000 に達するため、データが断片化され、パフォーマンスが低下します。ユーザーとそれほど大きくならないアカウントを保存するためのドキュメントを作成し、アカウントに参照されるトランザクションを保存するための別のコレクションを作成する方がよいでしょうか。それとももっと良い方法がありますか?

4

4 に答える 4

1

トランザクションを別のコレクションに分けます。ユーザーとトランザクションの間のデータと更新パターンはかなり異なるようです。トランザクションが常にユーザーに追加され、常に大きくなる場合、mongo ファイル内で大量に移動されます。そうです、それはパフォーマンスへの影響をもたらします (断片化、IO の増加、mongo の作業の増加)。また、配列操作のパフォーマンスは、ドキュメント内の大きな配列で分離されることがあるため、配列に数千のオブジェクトを保持することはお勧めできません (それをどうするかによって異なります)。

于 2013-08-06T13:37:32.503 に答える