在NodeJS中使用带有大量数据的Datatable时搜索错误

Ani*_*udh 8 datatable datatables mongodb node.js

我的数据库中有大约5,00,000条记录.我正在使用DataTables来构建管理面板来管理记录.我将Node.js作为MongoDB的支持.

我使用过这个库 - https://www.npmjs.com/package/datatables-query

到目前为止,在页面加载我已成功加载结果,如下图所示.

在此输入图像描述

每当我在搜索框中输入内容时,我都会收到500错误,如屏幕截图所示.

在此输入图像描述

这可能是什么问题?

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);
  });
});
Run Code Online (Sandbox Code Playgroud)

我在MongoDB中有一个名为User with 3 columns的表

1)姓名

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
  });
});
Run Code Online (Sandbox Code Playgroud)

Dar*_*kke 4

我可能会在数据上创建一个索引并搜索该索引,而不是搜索数据本身。但是,如果您创建全文索引,则需要对集合中的所有列进行组合,而 mongo只允许每个集合有 1 个全文索引

至于替代方案,您可以考虑 AWS 的 Elastic Search(它与 MongoDB 配合得很好)或 Sphinx Index(基于 PostreSQL)

编辑:我知道这个答案实际上并没有丝毫回答问题,但我担心 500 错误不是应用程序中的内存问题,而是数据库的内存问题(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/