问题标签 [mvcc]

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 投票
1 回答
770 浏览

postgresql - Why does MVCC require locking for DML statements

In PostgreSQL, the MVCC concurrency control mechanism says that:

MVCC locks acquired for querying (reading) data do not conflict with locks acquired for writing data, and so reading never blocks writing and writing never blocks reading

So, even for READ_COMMITTED, an UPDATE statement will lock the currently affected rows so no other transaction can modify them, until the current transaction commits or rolls back.

If a concurrent transaction issues an UPDATE on the locked rows, the second transaction will block until the first one releases it's locks.

  1. Is this behavior trying to prevent the write-write conflicts?

  2. Lost updates can still happen in READ_COMMITTED, as after the first transaction commits, the second one will overwrite the row (even if the database has changed between the UPDATE query start and the query end). So if lost updates are still possible, why does the second transaction have to wait? Couldn't the row-level snapshots be used to store the uncommitted transaction changes to avoid transactions having to wait for write-locks to be released?

0 投票
2 回答
747 浏览

ssis - 如何在通过 SSIS 的 Ingres 连接上设置 LOCKMODE SESSION WHERE LEVEL = MVCC

谁能提供有关如何从 SSIS 参加 MVCC 会话的建议?

从 Ingres DB 中读取数据,我们需要启用 MVCC 并从 SSIS 2008 R2 包中指定隔离级别。

此数据库上存在一个不使用 MVCC 的现有应用程序,因此在现有 DBMS 上简单地启用 MVCC 是不合适的。我们希望我们的读取在 MVCC 中登记的原因是确保我们不会导致锁定并破坏这个现有的应用程序(当我们不使用 MVCC 执行这些读取时,目前会定期发生这种情况)。

数据库版本是Ingres II 10.0.0 (su9.us5/132)

ADO.NET驱动版本是Ingres.Client.IngresConnection, Ingres.Client, Version=2.1.0.0驱动,

我们有类似的要求,需要在 Tibco BusinessWorks 中以编程方式执行此操作,并通过 SQL Squirrel 等交互方式执行此操作,并通过直接 SQL 执行(通过 JDBC)发出以下命令来满足此需求:

在 SSIS 中,我们可以使用IsolationLevel任务/序列的属性来设置会话隔离级别。但我找不到直接发出 MVCC 命令的方法。

我试图通过一个Exceute SQL Task步骤发出命令,但遇到以下错误:

第 1 行的语法错误。读取的最后一个符号是:'SET LOCKMODE'

我已经尝试过,但无济于事:

  • 有或没有终止;
  • 执行放置在序列内或序列外的步骤
  • DelayValidation在序列和步骤级别启用该属性
  • TransactionOption序列和任务级别的各种设置(以防万一!)
  • 通过 windows 环境变量设置锁定模式ING_SET = "SET LOCKMODE SESSION WHERE LEVEL = MVCC"。但是我的测试表明,我们在 SSIS 中使用的 ADO.NET 驱动程序支持这一点(顺便说一下,我们用于 SQL Squirrel 或 Tibco 的 JDBC 驱动程序也不支持它)。我相信这可能是一个 ODBC 功能。
  • 从数据流中的 ADO.NET 源步骤中发出命令。相同的语法错误。
  • [更新] 还尝试将SET ...命令包装在 Ingres 过程中,但这会导致语法错误,表明该SET ...命令在过程中的任何位置均无效。

谁能提供有关如何从 SSIS 参加 MVCC 会话的建议?

在这个阶段(我相信)我们受限于 ADO.NET 驱动程序,但如果没有其他选项可以与 ODBC 一起使用,那就这样吧。

0 投票
0 回答
139 浏览

mongodb - 如果频繁更新大型文档(> 1 MB),Monodb 更新性能会受到怎样的影响?

我使用有线老虎存储引擎阅读了 Mongodb,它具有 MVCC,它可能会创建同一文档的多个版本以实现更好的并发性。(使用 MMAPv1 存储引擎的 Mongo 没有 MVCC。这个问题是针对带有有线老虎存储引擎的 Mongo 的。)

如果我们经常更新一个大文档(> 1MB),缓存和磁盘中是否会有该文档的多个版本?什么时候删除旧版本?Mongodb中是否有任何适当的更新?

我将在一个集合中维护一些大文档,这些文档看起来像一个倒排索引。它的架构类似于 {"userid" : ["follower1", "follower2", "follower3",....]} 关注者列表可能包含 100,000 多个关注者。任何时候,都可以添加新的关注者或从列表中删除旧的关注者。在关注者列表中添加新关注者的性能如何?如果在一秒钟内,文档中的关注者列表更新了 10 次,那么至少在一段时间内是否会有 10 个文档的副本?

0 投票
0 回答
258 浏览

synchronization - 适合离线双向数据同步的算法

鉴于:

  • 代表公司信息和用户信息的关系数据库表信息(postgres)。
  • 公司和用户数据作为两个 .sqlite 文件下载到移动应用程序,可以使用 sql 连接和查看(最大限度地减少数据操作)

问题:

我们如何使用户数据能够离线更新和同步,但仍然允许我们使用 SQL 跨公司和用户 sqlite 数据库加入数据?

回答?:

我认为我们想要的是一种算法来进行同步。我已经查看了 MVCC,似乎是关于实现的最佳文章

但是,由此看来,跨两个数据库的连接看起来很模糊(必须在行中存储版本信息 --- 但也许我错了)。

理想情况下:

  • 能够相对容易地跨数据库连接数据。
  • 解决方案是否通用并不重要,但相对容易应用于其他数据类型/表的东西是有帮助的。
  • 没有冲突:“最近更新的胜利”有效

我想象存储一个自定义事务表并应用它,但认为有人已经解决了细节?

笔记:

  • 我意识到 Couchbase 支持这一点,但我们宁愿没有关系和文档存储。
  • MVCC“矫枉过正”吗?
0 投票
1 回答
2544 浏览

postgresql - 当查询和复制同时发生时,Postgresql 上的复制暂停

Postgress 遵循 MVCC 规则。因此,在表上运行的任何查询都不会与表上发生的写入冲突。查询根据运行查询时的快照返回结果。

现在我有一个主人和奴隶。分析人员使用从站来运行查询和执行分析。当从服务器正在复制并且分析师同时运行他们的查询时,我可以看到复制滞后很长时间。如果查询长时间运行,则复制滞后很长时间,如果主服务器上的写入次数恰好是相当高,然后我最终会丢失 WAL 文件,并且复制可以再继续进行。我只需要启动另一个奴隶。为什么会这样?我如何允许查询和复制在姿势上同时发生?我可以应用任何参数设置来实现这一点吗?

0 投票
1 回答
937 浏览

json - 如何在 Swift 中创建具有 init() 方法的类的实例?

这是我的 LoginData 模型类:

我想为以下类中的类创建实例:

0 投票
1 回答
135 浏览

parallel-processing - 并发数据库MVCC时间戳生成方法

我需要为 MVCC 快照隔离生成数据库时间戳。使用的典型方法:

“事务操作在 SI-TM 中实现如下。TM BEGIN:事务的逻辑快照是通过使用全局时间戳计数器的原子增量获得唯一时间戳来生成的。”

在具有数百个内核的系统中使用这种方法的问题在于它无法扩展。在有争议的内存位置上存在每秒 10M 原子增量的硬件限制。

有任何想法吗?

0 投票
2 回答
933 浏览

concurrency - MVCC & B 树 & 并发

我目前正在阅读 dbms 书,据我了解,Mvcc(多版本并发控制)用于高并发读写事务。但是“搜索结构的并发控制”一章提到了 B 树的不同锁定概念(锁定耦合、链接技术等)。

Mvcc 不是应用在 dbms 中 B-Tree 的内部和叶子节点上吗?B-Tree 并发和 MVCC 完全不同吗?如果是这样,Mvvc 是如何在 dbms 中实现的?

0 投票
1 回答
238 浏览

hbase - 放入协处理器 postBatchMutate

我想在 BaseRegionObserver.postBatchMutate 中为当前行添加一个新的键值,但我卡在 MVCC 中并且正在发生死锁。这是我的代码:

您可以在输出中找到此重复的 WARN 消息:

警告 regionserver.MultiVersionConcurrencyControl: STUCK: MultiVersionConcurrencyControl{readPoint=3, writePoint=5}

0 投票
1 回答
1006 浏览

java - 如何实现简单的 MVCC 数据结构

我正在阅读不同的并发模型和不同的并发特性,但没有文字谈论如何实现简单的 MVCC 数据结构。假设我必须实现一个简单的基于数组的数据结构,它提供基于 MVCC 的并发性。我的代码应该是什么样子?

我理解MVCC基本上意味着:(多版本并发控制)

1) 读隔离——你的写不应该阻塞读

2) 基于时间戳的排序,用于建立先发生关系/排序。

我需要记住任何其他方面吗?

此外,我下面的代码处理第一个要求,但如何实现时间戳排序?


PS:我想了解它是如何以通用方式实现的。请不要解释它是如何在特定数据库中实现的。