2017-09-06 9 views
8

データベースに約5,000,000のレコードがあります。私はDataTablesを使ってレコードを管理する管理パネルを構築しています。 私はNode.jsをMongoDBでサポートしています。NodeJSで巨大なデータを持つDatatableを使用しているときに検索エラーが発生する

私はこのライブラリを使用していた - https://www.npmjs.com/package/datatables-query

をこれまでのところ、ページの読み込みに私が正常に下の画像に示すような結果ロードされています。

enter image description here

私は検索ボックスに何かを入力するたびにスクリーンショットに示すように、私は500エラーを取得します。ここで問題になる可能性がどのような

enter image description here

DataTableは、大量のデータを含むグリッドを表示するのに適していますか?また、Node.js、Express、MongoDBのコンボを考慮した方がよいでしょうか?

ここに私のサーバーサイドコードがあります。私はおそらく作成します

app.post('/getUsersData',function(req, res) { 
    var Model = require('./models/user'), 
    datatablesQuery = require('datatables-query'), 
    params = req.body, 
    query = datatablesQuery(Model); 

    query.run(params).then(function (users) { 
    var data = JSON.stringify(users); 
    // var data = JSON.stringify(users); 

    res.end(data); 
    }, function (err) { 
    res.status(500).json(err); 
    }); 
}); 

私は3列

1とユーザーという名前のMongoDB内のテーブルを持っている)名前

2)メール

3)パスワード

$(document).ready(function() { 
    var table = $('#datatable').DataTable({ 
    // dom: 'Bfrtip', 
    processing: true, 
    serverSide: true, 
    order: [[1, 'asc']], 
    "aoColumnDefs": [ { "sClass": "hide_me", "aTargets": [ 0 ], visible: false } ], // first column in visible columns array gets class "hide_me" 
    ajax: { 
     url: "/getUsersData", 
     type: 'POST', 
     dataSrc: "data" 
    }, 
    columns: [ 
     { data : "_id"}, 
     { data : "name" }, 
     { data : "email" }, 
     { data : "password" }, 
    ], 
    responsive: true 
    }); 
}); 
+0

特定の列(場合によってはリレーショナルデータ)がある場合、MongoDbの選択はなぜですか? (批判ではなく、ちょっと好奇心) – DarkMukke

+0

チュートリアルのほとんどでNodeJSを学んでいる間、先生はMongoDBを使っていたので、私は先に進んだ。他のデータベースをお勧めしますか? – Anirudh

+0

これは、SQLとSQLの対戦を簡単に開始できる非常に懐疑的な人たちの質問ですが、私は、relational data(十分なノードpgsqlドライバがあります)とpostgresの両方を使用しています。すでにSQLを知っていれば、新しい言語を学ぶだけでそれを変更する必要はありません。 – DarkMukke

答えて

4

データそのものを検索するのではなく、データのインデックスとそのインデックスを検索します。ただし、フルテキストインデックスを作成する場合は、コレクション内のすべてのcolとコレクションのmongoを組み合わせる必要がありますallows only 1 full text index per collection。 (PostreSQLに基づく)の代替案については

、あなたがAWSの(MongoDBので正常に動作します)弾性検索やスフィンクスインデックスに見ることができる

編集: 私は実際に質問に答えていない、この答えを知っていますわずかですが 私は、500エラーはアプリケーションのメモリ問題ではなく、むしろDB(mongoはSQLと似ていないので、SQLのようにアプリケーションを設計しないこと)を恐れています。

いくつかの読み物は、あなたが変更デシベル構造

http://rachbelaid.com/postgres-full-text-search-is-good-enough/
https://about.gitlab.com/2016/03/18/fast-search-using-postgresql-trigram-indexes/

+0

500ステータスコードがOPのコードで明示的に返されているため、根本的な問題の内容を必ずしも示すものではありません。 – rdgd

+0

私はそう言っていましたが、限られた情報でしか推測できません – DarkMukke

1

を予定している場合ここで重要なのは、正確にDBやサーバ側の層の上に何が悪かったのかを考え出すされています。警告しているエラーメッセージは、次のドキュメントを参照するdatatablesライブラリの汎用メッセージです。https://datatables.net/manual/tech-notes/7

上記のドキュメントによれば、このエラーは、200サーバ。この場合、明示的にdatatablesクエリ呼び出しのエラーハンドラ/コールバックに500のエラーがスローされていますが、必要な情報を/ usに渡すことはありません。

次のステップでは、エラーをjsonとしてシリアル化して500応答とともに送信するか、またはエラーハンドラのerrconsole.logに送信するため、ブラウザのコンソールの[ネットワーク]タブでレスポンス本文を確認します。 /あなたのノードコードのコールバック。これにより実際に何が悪くなっているのかを理解することができ、その情報を使ってソリューションをより正確に処方することができます。あなたがログアウトしたものを更新してください!

関連する問題