sql >> データベース >  >> NoSQL >> MongoDB

クエリ出力を一時データベースに保存する方法は?

    Mongoは、「一時的な」コレクションをネイティブにサポートしていません。

    ここで行う一般的な方法は、結果出力全体を別のDBに実際に書き込まないことです。これは、Elasticsearchが独自のキャッシュを実行するため、上にレイヤーを配置する必要がないため、まったく意味がないためです。

    同様に、IOの懸念があるため、通常、Mongoまたは別のDBに10,000レコードの結果セットを書き込むことはお勧めできません。

    あなたが話していることについての機能リクエストがあります: https://jira.mongodb.org/参照/SERVER-3215 しかし、現時点では計画はありません。

    結果の表を作成できます。

    このテーブル内には、次のようなドキュメントがあります。

    {keywords: ['bok', 'mongodb']}
    

    各結果アイテムを検索してスクロールするたびに、このテーブルに行を書き込み、キーワードフィールドにその検索結果のキーワードを入力します。これは、検索ごとの検索結果リストごとの検索結果ごとになります。各検索結果が入ってくるときにMongoDBにストリーミングするのがおそらく最善でしょう。私はPythonをプログラミングしたことがないので(学びたいのですが)、疑似の例:

    var elastic_results = [{'elasticresult'}];
    foreach(elastic_results as result){
        //split down the phrases in this result and make a keywords array
        db.results_collection.insert(array_formed_from_splitting_down_result); // Lets just lazy insert no need for batch or trying to shrink the amount of data to one go or whatever, lets just stream it in.
    }
    

    したがって、結果に沿って進むと、基本的には、MongoDBへの入力の一種の「ストリーム」をできるだけ速く大量に挿入するだけです。これは非常にうまくできます。

    これにより、MRのようなものを処理するための単語や言語動詞のシャーディング可能なリストが得られ、それらに関する統計を集約することができます。

    あなたのシナリオについてますます知らなくても、これはほとんど私の最善の答えです。

    これは一時テーブルの概念を使用しませんが、代わりにデータを永続的にします。これは、Mongoを以降のタスクのストレージエンジンとして使用するため、そのサウンドで問題ありません。



    1. MongoDB$regexクエリと潜在的なエクスプロイト

    2. ドキュメントベースのデータベースとキー/値ベースのデータベースの違いは?

    3. 文字列をfloatに変更するMongodb配列

    4. Javaからのnginxによるポートフォワーディング