0

たとえば、レストランでの注文などのデータを mongoDB に保存する最良の方法は何でしょうか。

したがって、最初に「注文」コレクションが必要です。

また、ウェイター間でデータを同期するために多くの読み取りを行う必要があるため、完了した (支払われた) 注文とまだ開いている注文を同じリストに保存したくありません。

そこで、「現在」と「履歴」の 2 つの配列フィールドを持つ「注文」コレクションを思いつきました。現在、私はまだ支払われていないすべての注文を保存し(すべてのウェイターを介して同期する必要があります)、「履歴」には、閉じられたすべてのものを保存し、マネージャーまたはデータを確認したい人だけがアクセスする必要があります.

そうすれば、アクセス時間とデータの送信量を最小限に抑えることができます。

これは、これを行うための正しい、ベストプラクティスの方法でしょうか?

または、すべてを単一のリストに保存してから、時間などでソートするクエリを実行し、返送するドキュメントの量を制限する必要がありますか?

編集:

このコレクションでは、複数のレストランの注文を保存したいと考えています。したがって、このコレクション内の 1 つのドキュメントをレストランごとに使用してそこに注文を埋め込むか、このコレクション内のすべての注文を同じレベルに配置すると、各注文に restaurantId が含まれます。

4

1 に答える 1

2

注文コレクションは 1 つのレストランを表すため、代わりにすべての注文のレコードが含まれているわけではなく、各ドキュメントは次のようになります。

{
    _id:{}
    waiter: 'Sammaye',
    table: 9,
    items: [
        {id:9,qty:1,cooked:false}
    ],
    billed: false
}

そして、外出を待っている注文について知る必要があるすべてのウェイターは、このコレクションから を持つすべての注文ドキュメントを取得しますbilled false

にインデックスを配置すれば、これで十分ですbilled

あなたが言った他の方法を使用すると、問題が発生する可能性があります。たとえば、すべての注文を格納するコレクション内の 1 つのドキュメントです。そのドキュメントがやがて非常に大きくなる可能性があることは想像できました。

メモリ内演算子 ( など) を使用$pushする$pullと、ドキュメントの操作が遅くなる可能性があります。

また、これらはバインドされていない配列であり、時間の経過とともに一貫して成長するため、データベース内で断片化が発生する可能性があり、これもパフォーマンスを低下させます。

また、保留中のすべての注文を一度に取得できることを除いて、各注文をレコードとして保存するよりも利点はありませんが、バッチサイズを構成すると、すべての注文を個別のドキュメントとして保存すると、それにかなり近づく可能性があります。

于 2013-09-09T10:57:42.190 に答える