我有一个表,每年都会增加 10M 行。
该表有 10 列,称为 c1、c2、c3、...、c10。
我WHERE可能会在其中 8 个上使用该条款。
更具体地说:每次我查询表时,c10 列上总会有一个子句WHERE(它是一个日期,我可以搜索相等或范围)。
其他 7 个可能的可搜索列将不遵循任何模式。我可以搜索:
...以及所有其他可能的组合。
因此,在WHERE子句中,c10 将始终存在,而其他项可以以任意组合存在(甚至根本不存在)。
在这种情况下什么索引策略可以提高性能?我认为正确的做法是为每一列创建一个索引。使用多列索引可以提高性能吗?
据我所知,仅对于按此顺序使用 c1、c2、c3 或 c1、c2 或 c1 的查询,您将通过 (c1, c2, c3) 上的多列索引获得性能。但就像我说的,在我的场景中我唯一可以假设的是 c10 将始终出现在 WHERE 子句中(如果这有帮助的话,它也可以是第一个子句)
我刚刚开始开发我的第一个node.js应用程序,现在我正在我的VPS上测试它.观察过程"节点"资源的使用,我注意到当请求页面(特别是某些页面)时内存使用量增加.特别是,如果请求的页面是静态页面,则增加量最小.如果请求的页面是/ admin,则增加可以是1mb!当然,当请求/ admin时,我的服务器做的事情比提供静态页面要多.他连接到mongodb,执行4次"查找",他使用bind将结果绑定到html模板.现在,问题是什么?使用这个内存,永远不会释放!所以我认为我的代码中存在逻辑错误,但后来我做了另一个更有趣的测试.
考虑一下这个非常简单的nodejs服务器:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(3000, 'my_public_ip');
Run Code Online (Sandbox Code Playgroud)
如果我尝试用浏览器发出多个请求(只需按住f5一分钟),内存使用量就会慢慢增长,即使经过很长时间和关闭浏览器之后,进程使用的内存也永远不会被释放.现在,在我的/ admin代码中可能存在一些错误(使用的内存为1mb,并且每次请求都没有释放它非常高!),但我认为上面简单脚本使用的内存永远不会被释放是很奇怪的!你怎么看待这件事?有办法避免它吗?
另外,(在我的真实服务器),我用MEMWATCH在THYS方式:
var memwatch = require('memwatch');
memwatch.on('leak', function(info) {
console.log(info);
process.exit(1);
});
Run Code Online (Sandbox Code Playgroud)
如果我使用浏览器执行多个请求,大约10秒后,我正在执行此过程,此过程将退出,这是错误:
{ start: Wed Nov 26 2014 08:21:07 GMT-0500 (EST),
end: Wed Nov 26 2014 08:22:04 GMT-0500 (EST),
growth: 4775624,
reason: 'heap growth over 5 consecutive GCs (57s) - 287.65 mb/hr' }
Run Code Online (Sandbox Code Playgroud)
这是什么意思??好像与垃圾收集器有关!我知道在这里粘贴我的/管理员代码会更好但是片段很长并且与全局变量有关,所以如果没有200行副本就不可能理解:D.如果您需要更多信息,我会给你!
我正在为一家公司开发一个私人 Web 应用程序,他们要求我使用他们的服务器来托管它。我想阻止他们访问源代码。我怎样才能做到这一点?他们的服务器正在运行 debian 并且他们拥有 root 访问权限。
我找到了一些解决方案,比如将应用程序打包到一个可执行文件中,但该应用程序有很多依赖项,我使用的是 loopback.io 框架;这使得包装非常困难..
任何不同的解决方案?