【问题标题】:Distributed concurrency at the DB or in app code?数据库或应用程序代码中的分布式并发?
【发布时间】:2011-03-29 02:51:25
【问题描述】:

我正在编写一个分布式程序,它需要管理对某些数据库行的独占访问。显然,这种情况下存在许多技术,但试图 KISS。这会大规模扩展到用户吗?不知道,但我想规划一些未来的容量。

我不一定要采用经典的 PtP 或 PnS 队列模型,因为这种处理将是分散-收集和可选同步的。在经典队列模型上分层是可能的,但我担心会比必要的复杂。您能否推荐以下其中一项以及为什么要实施一些较低级别的控制?我有一个数据库和 n 个处理节点。

  1. 通过select for update(或等效项)轮询数据库记录。有些人对 A) 数据库争用和 B) 仍在进行轮询表示担忧。
  2. 网络同步资源锁定、等待处理通知的持久连接(一直在讨论 HTTP 服务器推送式...可能比在 MQ 上分层更复杂?),
  3. UDP 消息推送(带 TTL)由单个调度程序?

任何优点/缺点或您在过去的解决方案中是如何实现相同的,您在数据库同步层是否有同样的顾虑?

【问题讨论】:

  • 是的,苹果 //c 在你的照片中!
  • 独占访问的目的是什么 - 避免编辑冲突?我也不明白你的scatter-gather语句,数据库是分布式的吗?
  • 单数据库。我有需要路由到特定端点或一组端点的遥测数据。这些端点可能会或可能不会配置为“同步”,因为我需要等待响应。独占访问的目的是我只希望一个进程|线程|无论如何能够路由任何给定的消息,并且会有数百个并发路由进程,因为会有很多消息。经典 MQ,但我无法更改遥测设备以符合 MQ 模式(将响应发送回 MQ),我需要直接控制它们。

标签: database concurrency message-queue


【解决方案1】:

好的,刚看到这个。

“作为队列的表”非常简单。 Just use lock hints to control behaviour

有一些与您想要做的事情相关的微妙之处,但通常使用 assign 或 OUTPUT 进行一次更新将为您解决并发位。它可以很好地工作和扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-16
    • 2015-09-26
    • 2012-06-12
    • 2011-05-31
    • 1970-01-01
    • 2011-03-02
    • 2017-12-12
    相关资源
    最近更新 更多