问题标签 [database-concurrency]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1482 浏览

oracle - oracle plsql中的并发

我在 Oracle 中有一个 PL/SQL 包,它的重要功能是:

当两个请求同时调用这个函数时,它们都传递了这个函数,并且两个相同的in_id 被插入到tbl_log中。注意:tbl_log没有针对性能问题的 PK。有什么解决办法吗?

0 投票
1 回答
334 浏览

git - 如何在 postgresql 中存储 git 分支之类的数据结构?

我正在尝试建立一个类似维基百科的东西,多人可以编辑内容。有特权的人也可以恢复更改。我不希望恢复是有损的(这意味着真的放弃人们所做的编辑。它应该只隐藏它),所以这似乎需要一个像数据结构这样的 git 分支来存储编辑,并带有一个指向“当前”的指针。

我试过这个设计:

其中relationship记录是新文章还是现有文章的编辑:

这里的意思是,作者 2 将文章/a1从 foo 更改为 bar,并且文章/a2是新的。

current_article记录哪篇文章是“当前”文章,通常它只是指向最新的文章。还原后,它可以指向一个较旧的:

当一个编辑进来时,我像这样插入它:

并且依靠插入前触发器来查找该路径的当前文章并填写关系,并依靠插入后触发器来更新当前文章指针。

你觉得这个设计怎么样?我在这个设计中遇到的问题是处理并发的困难。

在前插入触发器中,当它找到当前文章时,它可能已经被更改,而在后插入触发器中,它可能会错误地用已经指向不同的文章覆盖当前文章。

在这方面我有三个问题:

  1. 可序列化的隔离会解决问题吗?(我对 MVCC 的概念还很陌生,仍然试图绕开它)如果没有,我应该如何解决它?
  2. 有没有更好的设计不必处理并发?
  3. 如果我确实需要处理并发,我如何在不同的竞争条件下对我的设计进行单元测试(或者这样的单元测试甚至是必要的)?

谢谢你。

0 投票
1 回答
489 浏览

mysql - 限制分配给慢 MySQL 查询的资源

我有一个进程需要每 X 分钟运行一次以更新某些信息。查询需要 10 秒、20 秒甚至一分钟都没有关系。重要的是,例如,信息至少每 10 分钟更新一次。

因为查询速度很慢,并且服务器正用于其他查询,所以会影响其他用户。这是我试图解决的情况。

我会cpulimit运行查询的任何进程,但占用所有资源的进程是 MySQL 服务器本身,所以看起来我需要一些 MySQL 特定的设置。

这是导致服​​务器冻结的单个 MySQL 查询。我想限制分配给该特定查询的资源。

0 投票
3 回答
977 浏览

scala - 使 HTTP API 服务器与 Future 异步,如何使其成为非阻塞的?

我正在尝试编写一个对特定资源执行基本 CRUD 操作的 HTTP API 服务器。它与外部数据库服务器对话以执行操作。scala 中的未来支持非常好,并且对于所有非阻塞计算,都使用了未来。我在很多地方都使用过未来,我们用未来包装一个操作并继续前进,当值最终可用并触发回调时。

来到 HTTP API 服务器的上下文,可以实现非阻塞异步调用,但是当一个GET或一个POST调用仍然阻塞主线程时,对吗?

  1. 发出 GET 请求时,成功 200 表示数据已成功写入数据库且未丢失。在将数据写入服务器之前,创建的线程仍然处于阻塞状态,直到从数据库接收到插入成功的最终确认,对吧?
  2. 主线程(在收到 http 请求时创建)可以委托并返回 Future,但它是否仍然阻塞,直到触发 onSuccess,当值可用时触发,这意味着 db 调用成功。

我无法理解 HTTP 服务器的设计效率如何以最大限度地提高效率,当数百个请求到达特定端点时会发生什么以及如何处理它。有人告诉我,slick 采用了最好的方法。

假设有 100 个 db 连接线程,如果有人可以用未来和没有未来来解释成功的 http 请求生命周期。

0 投票
0 回答
533 浏览

entity-framework - EF Core 如果不存在则创建数据库行

因此,如果 id 尚不存在,我将使用我的 web 服务在数据库中保存一行。所以我分两步做。首先,我在上下文中运行一个选择以带回具有给定 ID 的实体。如果返回 null,我创建一个新实体并调用 saveChanges。这几乎总是完美地工作。但是,当有多个请求同时访问网络服务器时,有可能两个请求几乎同时运行。发生这种情况时,他们有可能都创建一行。这实际上正在发生。

你会如何处理这种情况?

ps 我正在使用 EntityFramework Core。

0 投票
0 回答
85 浏览

database - 查看可串行化

如果事务调度不是可查看序列化的,我们能否得出该调度不可序列化的结论?

换句话说,计划是否有可能是可序列化的,但不能查看可序列化的?

如果可能,请举个例子。

0 投票
1 回答
49 浏览

ruby-on-rails - 并发数据库会话存储

亚马逊如何在将产品添加到购物车时维护设备之间的会话?

我们如何在 ROR 中实现它?

0 投票
1 回答
2945 浏览

mysql - 1000 个并发 mysql 用户需要多少个数据库连接?亚马逊 AWS 数据库

我在任何地方都找不到答案,我已经在整个互联网上查看了。

我即将启动一个连接到网络服务器的应用程序(手机游戏)。我预计高峰时段将有大约 1,000 名并发用户在游戏中。对游戏的每个请求都需要数据库请求来获取或添加新数据。

我目前正在使用来自 AWS RDS 的 t2.small 数据库。显然这种类型的数据库的 max_connections 是 150。我的问题是:

1) 这是否意味着最多只能有 150 个并发用户访问我的应用程序/游戏?对于每月 30 美元的数据库服务器来说,这似乎是一个极低的数字。

2)每个数据库连接持续多长时间?如果我有 500 人提出一个数据库请求并且限制是 150 个连接,那么如果每个连接只打开 250 毫秒就不会那么糟糕了。如果每个连接打开 1 秒,那么每个请求等待大约 3 秒的人就太长了。

3) 我是否需要为管理员保留数据库连接才能每次都能够登录?

任何帮助都会很棒,谢谢。

0 投票
2 回答
817 浏览

sql - 管理数据库并发的最佳方式?

我在处理并发时遇到了一个问题。

在下面的示例中,两个用户 A 和 B 编辑同一张发票并对其进行不同的更改。如果他们两个同时单击保存,我希望其中一个成功,另一个失败。否则,生成的发票将是不受欢迎的“合并发票”。

这是在 PostgreSQL 中测试的示例(但我认为这个问题应该与数据库无关):

所以发票的初始行是:

现在,用户 A 编辑发票,删除第 2 行并点击 SAVE

同时用户 B 编辑发票并添加第 3 行,然后点击 SAVE

不幸的是,两个事务都成功了,我得到了合并的行(损坏的状态):

既然这不是我想要的,我有什么选项来控制并发?

0 投票
1 回答
625 浏览

django - Django 并发编辑

对于应该如何以及在何处实现并发编辑功能,我有点困惑,因此无法执行 Mutex 并发编辑。我的代码:

模型.py

视图.py

目的是,用户可以访问和编辑特定表单,但前提是没有其他人正在编辑它。否则,用户会看到弹出消息并被重定向到主页。当用户正在编辑时,会在提交表单时触发并释放锁。在这种情况下,这与以下行有关:

但是,这是行不通的。我哪里错了?目的是应该是一个相对简单的 Mutex 实现。我正在尝试遵循此处给出的示例