Cha*_*l72 5 database language-agnostic mutex distributed-computing
我发现自己经常实现的常见编程逻辑就像下面的伪代码:
Let X = some value
Let Database = some external Database handle
if !Database.contains(X):
SomeCalculation()
Database.insert(X)
Run Code Online (Sandbox Code Playgroud)
但是,在多线程程序中,我们在这里有竞争条件.线程A可能会检查是否X存在Database,发现它不存在,然后继续调用SomeCalculation().同时,线程B还将检查是否X存在Database,发现它不存在,并插入重复的条目.
所以当然,这需要同步,如:
Let X = some value
Let Database = some external Database handle
LockMutex()
if !Database.contains(X):
SomeCalculation()
Database.insert(X)
UnlockMutex()
Run Code Online (Sandbox Code Playgroud)
这很好,除非应用程序是一个分布式应用程序,运行在多台计算机上,所有这些都与同一个后端数据库机器通信?在这种情况下,Mutex是无用的,因为它只将应用程序的单个实例与其他本地线程同步.为了实现这一目标,我们需要某种"全局"分布式同步技术.(假设简单地禁止重复Database是不可行的策略.)
一般来说,这个问题的一些实际解决方案是什么?
我意识到这个问题非常通用,但我不想让这个问题成为特定于语言的问题,因为这是跨多种语言和多种数据库技术的问题.
我有意避免说明我是在谈论RDBMS还是SQL数据库,而不是NoSQL数据库,因为我再次 - 我正在寻找基于行业惯例的广义答案.例如,这种情况是原子存储过程可能解决的吗?还是原子交易?或者这是否需要像"分布式互斥体"这样的东西?或者更一般地说,这个问题通常是由数据库系统解决的,还是应用程序本身应该处理的?
如果事实证明这个问题在没有进一步信息的情况下根本无法回答,请告诉我,以便我可以对其进行修改.
| 归档时间: |
|
| 查看次数: |
406 次 |
| 最近记录: |