我正在开发一个Web应用程序,它经常需要运行计算密集型查询,其结果存储在一个单独的表中.使用MySQL,此查询大约需要500毫秒(尽可能优化,相信我).为了消除这个瓶颈,我创建了一个Java程序,它将相关的DB数据加载到内存中并执行查询本身; 它需要大约8 毫秒(我有点自豪).我想使用这个Java程序来获取结果,如果它失败或不可用,则故障转移到PHP运行MySQL查询.
由于将数据加载到Java应用程序需要一些时间,因此它将加载一次并继续作为后台进程运行. 现在,问题是我如何通过PHP与这个Java应用程序进行通信?
记住:
我打算使用Memcache,其中PHP将写入已知密钥并轮询,直到该密钥更改为"已完成",同时Java将轮询该密钥,并且一旦发现某些内容执行该作业并将其设置为"已完成".但是,由于两个原因,这不起作用.首先,PHP和Java使用序列化对象读取/写入Memcache,并且没有办法改变它,我不希望Java反序列化PHP对象,反之亦然 - 它太乱了.其次,这不符合ACID - 如果在那里建立的队列将存在竞争条件.
就目前而言,我坚持轮询MySQL"选择"以查看作业是否已脱离队列,这远非最佳解决方案,因为轮询时间需要较慢,因此MySQL不会过于频繁.我需要更好的解决方案!
谢谢.
编辑:Duh.看起来我将在Java中使用某种SocketServer,我对此并不熟悉.一个例子可能有帮助:)
我有一个表单,其中有一个提交按钮.
但是,我想以某种方式'捕获'提交事件并防止它发生.
有什么方法可以做到这一点吗?
我无法修改提交按钮,因为它是自定义控件的一部分.
有没有办法在我的应用程序上运行终端命令,然后访问我的UI上的数据?具体top.
我想提高我的Rails应用程序的可伸缩性.目前它运行在apache/mongrel(实际上是mongrel集群)上.
用Thin或Passenger取代它会改善我应用的可扩展性吗?
谢谢,
Sivakumar.
我已经被这个问题困住了一个多星期了.希望有人能指出我正确的方向.
我首先简要介绍一下我的架构.
资产1 ---> 1地址* - > 1区* - > 1区* - > 1国家
套餐1 - >*资产
使用自我跟踪实体(STE)+ WCF.
脚步:
在步骤2中,呼叫使用预先加载的地址.
from p in context.Assets.Include("Address.Area.Region.Country")
Run Code Online (Sandbox Code Playgroud)
这是尝试呼叫时的错误
context.Packages.ApplyChanges(package)
Run Code Online (Sandbox Code Playgroud)
AcceptChanges无法继续,因为对象的键值与ObjectStateManager中的另一个对象冲突.在调用AcceptChanges之前,请确保键值是唯一的.
编辑
在窥探之后,我发现这是一个STE问题.问题是您无法持久存储包含此处概述的同一实体的多个实例的图形.这是我的问题.
如何将实体添加到我的实体集合中.新实体可能具有包含与集合中已有密钥相同的密钥的相关实体.即添加可能包含相同地址,区域,地区或国家/地区实体的新资产.
这是我的约束:
我知道Diego B Vega建议的可能解决方案,但这些不是我可以用于我的解决方案的选项.有没有人有任何其他想法?
我为Windows下载了Netbeans IDE 6.9.但我找不到安装程序选项.看http://blogs.oracle.com/geertjan/entry/generate_a_netbeans_platform_installer,它说有一个,也在http://netbeans.org/community/releases/69/index.html上说它有新的功能"基于NetBeans平台的应用程序为大多数常见操作系统生成安装程序".
为什么我没有?
为什么IE和FF的输出不同?
在IE中显示:Hello和In FF显示:嗨
var message = "Hi";
setTimeout(function(){alert(message);},10);
setTimeout(function(){message = "Hello";},0);
Run Code Online (Sandbox Code Playgroud)
什么是标准杆?哪个浏览器做得对?
注意:如果我在FF中将10转换为11,那么它会显示Hello
我知道标题听起来很熟悉,因为有很多类似的问题,但我要问问题的不同方面(我知道在堆栈上放置东西并将它们放在堆上之间的区别).
在Java中,我总是可以返回对"本地"对象的引用
public Thing calculateThing() {
Thing thing = new Thing();
// do calculations and modify thing
return thing;
}
Run Code Online (Sandbox Code Playgroud)
在C++中,要做类似的事情,我有2个选项
(1)每当我需要"返回"一个对象时,我都可以使用引用
void calculateThing(Thing& thing) {
// do calculations and modify thing
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它
Thing thing;
calculateThing(thing);
Run Code Online (Sandbox Code Playgroud)
(2)或者我可以返回指向动态分配对象的指针
Thing* calculateThing() {
Thing* thing(new Thing());
// do calculations and modify thing
return thing;
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它
Thing* thing = calculateThing();
delete thing;
Run Code Online (Sandbox Code Playgroud)
使用第一种方法我不必手动释放内存,但对我而言,它使代码难以阅读.第二种方法的问题是,我必须记住delete thing;,这看起来不太好.我不想返回复制的值,因为它效率低(我认为),所以这里提出问题
我正在学习SQL,我希望你的建议,看看这段代码是否写得正确,还是更好的方法.这个脚本创建:
允许检查IP是否为黑名单的SPROC请告知我们!谢谢!
-- Black Listed Table
CREATE TABLE UtlBlacklistedIPs
(
octet1 TINYINT,
octet2 TINYINT,
octet3 TINYINT,
octet4 TINYINT
);
Run Code Online (Sandbox Code Playgroud)1 SPROC
-- Convert an IP address in 4 octet for db storing
CREATE PROCEDURE dbo.storeIPoctetsv1
@ip CHAR(15)
AS
BEGIN
SET NOCOUNT ON
INSERT UtlBlacklistedIPs(octet1, octet2, octet3, octet4)
SELECT
CONVERT(TINYINT, PARSENAME(@ip, 4)),
CONVERT(TINYINT, PARSENAME(@ip, 3)),
CONVERT(TINYINT, PARSENAME(@ip, 2)),
CONVERT(TINYINT, PARSENAME(@ip, 1))
END
Run Code Online (Sandbox Code Playgroud)
2 SPROC
-- SPROC check if an IP address has been black listed
CREATE PROCEDURE dbo.sprocCheckIp
@ip …Run Code Online (Sandbox Code Playgroud)