0

次のように、JSON で表現できるデータを格納する必要があります。

Article{
    Id: 1,
    Category: History,
    Title: War stories,

    //Comments could be pretty long and also be changed frequently
    Comments: "Nice narration, Reminds me of the difficult Times, Tough Decisions" 

    Tags: "truth, reality, history", //Might change frequently

    UserSpecifiedNotes:[
    //The array may contain different users for different articles
    {
        userid: 20,
        note: "Good for work"
    },
    {
        userid: 22,
        note: "Homework is due for work"
    }
    ]
}

さまざまな記事を読んだ後、データの非正規化は、このデータを処理する方法の 1 つです。しかし、共通フィールドは非常に長く、頻繁に変更される可能性があるため、繰り返したくありません。このデータを表現および検索するための他のより良い方法は何でしょうか? 親子?内部オブジェクト?


現在、私は多くの挿入、更新、およびいくつかの検索を扱っています。しかし、検索を実行するときはいつでも、非常に高速でなければなりません。エラスティック検索を使用するために NEST (.net クライアント) を使用しています。使用される検索クエリは、次のように機能することが期待されます。

  1. 入力:searchStringuserID
  2. 動作: タイトル、コメント、タグ、または関連性の高い順に並べ替えsearchStringられたメモのいずれかを含む記事userID
4

1 に答える 1

0

通常のシナリオでは、記事の主な内容はめったに変更されませんが、記事に対する「UserSpecifiedNotes」/コメントはより頻繁に生成/追加されます。これは、親子関係を実装するための理想的な使用例です。

内部オブジェクトを使用すると、新しいメモが入るたびに、すべての「man article」と「UserSpecifiedNotes」/comments のインデックスを再作成する必要があります。親子関係を使用すると、新しいメモを追加するだけです。

指定した詳細を使用して、4 つのインデックスのアプローチを取ることができます

  • 主な記事 (id、カテゴリ、タイトル、説明など)
  • コメント (コメント者、コメント テキストなど)
  • タグ (タグ、その他のメタ タグ)
  • UserSpecifiedNotes (userId、メモ)

心に留めておく必要があるのは、あなたの実際の要件です。親子関係があると、より多くのメモリが必要になり、検索のパフォーマンスが少し低下します。ただし、インデックス作成は高速になります。

一方、ネストされたオブジェクトは、インデックス作成の前に記事に関連するすべてのデータを収集する必要があるため、インデックス作成にかかる時間が大幅に長くなります。もちろん、すべてを保存して、更新として追加することもできます。より簡単なメンテナンスと実装の容易さとして、親子を使用することをお勧めします。

于 2015-09-09T12:35:19.133 に答える