小编raf*_*mag的帖子

Java规则引擎的优缺点

采用Java规则引擎JESSDrools有什么优缺点?还有其他球员吗?

我知道Drools是Open Source而JESS不是,但是他们如何比较易用性,性能,与代码集成的其他方面?

java rules drools jess jrules

107
推荐指数
3
解决办法
9万
查看次数

如何为PostgreSQL编写自己的全局锁定/解锁函数

我有postgresql(在perlu中)函数getTravelTime(整数,时间戳),它试图选择指定ID和时间戳的数据.如果没有数据或数据是旧的,则从外部服务器下载它们(下载时间约300ms).

多个进程使用此数据库和此功能.当两个进程找不到数据并下载它们并尝试插入travel_time表时,会出现错误(id和timestamp对必须是唯一的).我想到了锁.锁定整个表将阻止所有进程并且只允许一个进程.我只需要锁定id和时间戳.pg_advisory_lock似乎只锁定在"当前会话"中.但我的进程使用自己的会话.

我试着编写自己的锁定/解锁功能.我做得对吗?我使用主动等待,我怎么能省略这个?也许有一种方法可以使用pg_advisory_lock()作为全局锁?

我的代码:

CREATE TABLE travel_time_locks (
    id_key integer NOT NULL,
    time_key timestamp without time zone NOT NULL,
    UNIQUE (id_key, time_key) 
);

------------
-- Function: mylock(integer, timestamp)
DROP FUNCTION IF EXISTS mylock(integer, timestamp) CASCADE;
-- Usage: SELECT mylock(1, '2010-03-28T19:45');
-- function tries to do a global lock similar to pg_advisory_lock(key, key)
CREATE OR REPLACE FUNCTION mylock(id_input integer, time_input timestamp)
  RETURNS void AS
$BODY$
DECLARE
    rows int;
BEGIN
    LOOP

        BEGIN
            -- active waiting here !!!! :(
            INSERT INTO travel_time_locks (id_key, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql concurrency locking blocking

2
推荐指数
1
解决办法
1829
查看次数

标签 统计

blocking ×1

concurrency ×1

drools ×1

java ×1

jess ×1

jrules ×1

locking ×1

postgresql ×1

rules ×1

sql ×1