基本上,我有一个主节点,用于在工作节点之间分配任务。工作人员的数量可能会发生变化,这意味着工作人员无法在服务器端进行硬编码。Master向队列提交一个任务,其中一个worker接收该任务,处理它并返回结果。最关键的方面是低延迟。工作节点上的典型处理时间约为 100-300 毫秒,这意味着消息传递系统不应给处理时间增加明显的延迟。
目前我正在研究请求-响应 JMS 模式。这意味着master将任务提交到共享队列,worker将从队列中取出任务并将结果提交到主节点监听的另一个队列。主人会将响应与请求关联起来。
恐怕JMS可能会给系统带来延迟,这是不可接受的。也许我应该看看其他解决方案?比如 RabbitMQ、JGroups 还是 ZooKeeper?
如果 JMS 适合这里,您能推荐最快的 JMS 代理吗?目前我正在研究ActiveMQ
该解决方案的另一项要求是它应该能够在云端工作
我试图从 Java 内存模型的角度来理解“顺序一致性”。JLS 的定义,第 17 章对我来说不是很清楚。
我会给出我的看法,如果我错了,请纠正我。具有一个线程顺序一致性的程序意味着如果在程序顺序中action1在action2之前,那么action2应该看到action1的结果。
有两个线程。
线程 1:
action1
action2
Run Code Online (Sandbox Code Playgroud)
线程2:
action3
action4
Run Code Online (Sandbox Code Playgroud)
如果action3
看到 的结果action2
,那么它也应该看到 的结果action1
。
说我有两张桌子:
create table parent (
id number not null,
constraint parent_pk primary key(id),
)
create table child (
id number not null,
parent_id number not null,
constraint child_pk primary key(id),
constraint child_fk1 foreign key(parent_id)
references parent(id)
)
Run Code Online (Sandbox Code Playgroud)
父表很大,比如300万条记录.现在我运行delete语句:
delete from parent; //even without where clause
Run Code Online (Sandbox Code Playgroud)
你能解释一下执行这个陈述时实际发生了什么吗?其中没有指定"ON DELETE CASCADE"选项,据我所知,这意味着如果子表包含对父ID的引用,则从父表中删除应该失败.所以这意味着在从父表中删除行之前,Oracle应检查是否存在任何子记录.但这真的非常慢 - 它是逐行删除.
我对么?如果没有,请解释Oracle从父表中删除时的工作原理,并检查子表中是否还没有孤立?