我的数据库中有大约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);
});
});
我在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
});
});
答案 0 :(得分:4)
我可能会在数据上创建索引并搜索该索引而不是搜索数据本身。但是,如果你创建了一个全文索引,你需要将你的集合中所有cols和mongo allows only 1 full text index per collection组合起来。
至于替代方案,您可以查看AWS的弹性搜索(适用于MongoDB)或Sphinx索引(基于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/
答案 1 :(得分:1)
这里的关键是弄清楚DB或服务器端层究竟出了什么问题。您发出警告的错误消息是来自数据表库的一般消息,它指向以下文档:https://datatables.net/manual/tech-notes/7
上面链接的文档说,只要从服务器返回非200响应,就会发生此错误。在这种情况下,您明确地在数据表查询调用的错误处理程序/回调中抛出了500错误,但这并没有为您提供我们所需的信息!
下一步是在浏览器控制台的网络选项卡中查看响应正文,因为您将错误序列化为json并将其与500响应一起发送,或者console.log
发出err
{{1}} 1}}在节点代码中的错误处理程序/回调中。这将使您了解实际出现的问题,通过这些信息,我们可以更准确地规定解决方案。发布更新时请注明您的任何内容!
答案 2 :(得分:0)
这是我试图解决此问题的解决方案: 转到jquery.datatable.min.js,然后注释掉错误消息,您就可以开始了。
function K(a, b, c, d) {
// c = "DataTables warning: " + (a ? "table id=" + a.sTableId + " - " : "") + c;
// d && (c += ". For more information about this error, please see http://datatables.net/tn/" + d);
// if (b) E.console && console.log && console.log(c); else if (b = n.ext, b = b.sErrMode || b.errMode, a && r(a, null, "error", [a, d, c]), "alert" == b) alert(c); else {
// if ("throw" == b) throw Error(c);
// "function" ==
// typeof b && b(a, d, c)
// }
}