我的Rails应用程序出现问题,其中一些随机查询需要大约5秒或更长时间才能完成.大多数情况下,查询非常简单(select * from x where id = ?),字段甚至也被编入索引.
以下是有关设置的更多信息:
在查看Appsignal中的查询性能时,我发现了这一点.我注意到大多数查询在几毫秒内完成,然后时不时地,仍然在同一个请求中,有多个查询需要5秒多才能完成.奇怪的是它总是需要5秒.......这是行动中的图片:

我试过的事情:
我在应用程序中注意到这一点,因为有些页面需要很长时间才能加载(我有一个函数调用需要大约1分钟才能完成)并且不知何故这会阻止新的请求.这对我来说很奇怪,因为有4个工作程序,每个工作程序有8个线程= 32个线程可以处理其他请求.
我在上面的图片中对查询进行了解释,这是输出:
Limit (cost=0.28..8.30 rows=1 width=150)
-> Index Scan using index_addresses_on_addressable_id_and_addressable_type on addresses (cost=0.28..8.30 rows=1 width=150)
Index Cond: ((addressable_id = 1) AND ((addressable_type)::text = 'University'::text))
Filter: (deleted_at IS NULL)
Total query runtime: 13 ms
Run Code Online (Sandbox Code Playgroud)
这是地址表的模式:
# Table name: addresses
#
# id :integer not null, primary key
# street :string
# …Run Code Online (Sandbox Code Playgroud) 我正在使用PhoneGap制作一个Android应用程序.我要做的是让应用程序通过WebSockets与我的Node.js服务器通信.我的Node.js服务器使用Socket.IO,当我打开应用程序时,它会自动回退到轮询,这与桌面Chrome应用程序相反,桌面Chrome应用程序很乐意打开WebSocket并通过它进行通信.
我已经阅读了关于将实际的WebSocket API与Phonegap集成的博客文章.问题在于我没有手动覆盖'onConnect,onMessage'函数,而是Socket.IO为我做了所有这些.
有没有办法将WebSockets集成到我的Android Phonegap应用程序中?
我目前正在开发一个项目,该项目必须使用WebSockets作为向我的客户端传输数据的方式.基础设施看起来像这样.
客户端 - > Web服务器 - > Microsoft SQL数据库
我认为最理想的情况是这样的:客户端打开服务器的套接字.服务器打开Microsoft SQL数据库的套接字.每当更新数据库(插入一些数据)时,DB都会将数据写入套接字.服务器将数据写回客户端.这可能有点单调乏味,也许我可以以某种方式直接从客户端打开到数据库的套接字?
我想知道如果MSSQL数据库更新,是否有办法自动通知套接字到Web服务器,以便它可以处理该信息.
主要问题是真的; 我将如何做这项工作?我已经研究过一些与WebSockets一起工作的项目,比如Node.JS和Socket.IO,还有Tornado.虽然我没有找到任何关于在哪里寻找这个特定功能的线索.我已经为NodeJS的MSSQL数据库找到了一些相当不稳定的驱动程序,但是不知道是否有任何方法可以向数据库建立套接字并在数据库被泵入数据库时立即通过套接字发送数据.
我也意识到在客户端和数据库之间建立一个套接字并不聪明,说安全性最低,因为现在这不是问题,并且SQL不是实时应用程序的方法,但我必须遵守它目前 :)
编辑1:
感谢@tomfanning我现在知道这个问题的解决方案,但严重怀疑性能的提高.让我为你描绘一下情况.如果我在MSSQL数据库上使用Trigger,我想象这会发生.
情况1
现在想象相同的场景,然后用AJAX
情况2:
在情境1中,您需要请求和套接字发出/接收,在情况2中,您只需要一个请求.如果我要将AJAX请求的超时设置为10MS,那么用户看起来好像它是像websocket这样的实时应用程序?或者情况1仍然会更有效率,我只是夸大其词?
提前致谢!
我正在制作一个应用程序,需要将套接字映射到某个对象。我认为使用 Socket.IO 提供的 socket.id 变量会很安全。不幸的是,在调试时我发现 socket.id 发生了变化,而客户端没有断开/重新连接或其他任何操作。
这是一小段代码来展示我正在尝试做的事情:
var io = require('socket.io').listen(8080),
var myVariable = new Array();
// Main event loop
io.sockets.on('connection', function (socket) {
socket.on('myEvent', function(data) {
myVariable[socket.id] = data;
}
// 'someOtherEvent' which uses the mapped data.
socket.on('someOtherEvent', function(data) {
// Doesn't always work because socket.id has changed and var is empty
doSomethingWith(myVariable[socket.id]);
}
});
Run Code Online (Sandbox Code Playgroud)
我不确定,但我认为这不是预期的效果。为什么会发生这种情况以及我该如何解决它?
我正在尝试创建一个具有对象名称的类,其间有空格.就这样我可以像这样访问它们:
$object->{'Var name with spaces'};
Run Code Online (Sandbox Code Playgroud)
我已经在这里阅读了这个主题,现在知道如何访问这些变量,但我不知道如何用这些变量创建一个类.我尝试过类似的东西,但是我无法让它起作用:
class Hotel
{
public ${'Var name with spaces'} = 'Some value'; // Fails
}
Run Code Online (Sandbox Code Playgroud)
我如何在包含空格的类定义中创建变量?