如何实现共享数据库的多个消费者应用程序(多租户)?

时间:2014-05-28 13:16:26

标签: java database multithreading oracle11g multi-tenant

Snapshot以下是当前application flowenter image description here

当前流程

user Logged处于这些 multiple deployments 时,相应的SMSAgent(java class) insert user info in databaseSMSHelperjava Scheduler,它从数据库中读取数据在其本地队列send SMS,然后update user status in database

此流程的问题

现在,在上面的场景中, Multiple SMS is getting send to Single User 因为数据库很常见,并且通知帮助程序都从数据库中获取联系人详细信息(可能很常见)并向该用户发送短信。

现有解决方案

目前,此问题的解决方案仅在oracle 11g中可用,其中select查询具有更新跳过锁定支持。

期望

如何在应用程序级别而不是在查询级别上对所有数据库实现相同的目标?

1 个答案:

答案 0 :(得分:0)

首先,你必须通过更新保留该行,然后选择。

假设你有200行,

首先你要做的是 RESERVE 一些值,这些值在实例中是唯一的,你也可以限制你的查询中没有更新的行,然后选择你的查询保留的行< / p>

  

UPDATE TABLE_NAME SET SERVER_INSTACE_ID = UNIQUE_VAL AND ROWNUM&lt; = RECORD_RESERVATION_LIMIT

     

SELECT * FROM TABLE_NAME WHERE SERVER_INSTANCE_ID = UNIQUE_VAL

通过这种方法,您无需在行或表上获取锁定。