根据文档的说法,亚马逊红移是从PostgreSQL 8衍生出来的。
根据我的理解,PosgreSQL 8 支持多版本并发控制(MVCC)是在物理级别上通过添加新的行版本而不是就地更新或标记行以删除而不是删除现有行来实现的。MVCC的优势是:
为查询(读取)数据而获取的MVCC锁与为写入数据而获得的锁不冲突,因此读取从不阻止写入和写入从不阻止读取。即使在通过使用创新的可序列化快照隔离(SSI)级别提供最严格的事务隔离级别时,PostgreSQL仍然维护这一保证。
红移文档州
Amazon使用的专用数据存储模式和查询执行引擎与PostgreSQL实现完全不同。
此外,与基于行存储的Postgres不同,Redshift是基于列的存储。
同时,Redshift拥有抽真空,这使得它与PostgreSQL类似。来自Redshift文档:
Amazon不会自动回收和重用删除行和更新行时释放的空间。要执行更新,Amazon删除原始行并追加已更新的行,因此每个更新实际上都是一个delete,后面是insert。执行删除时,行被标记为删除,但不删除。查询处理器需要扫描已删除的行和未删除的行,因此太多已删除的行可能需要不必要的处理。您应该在大量删除或更新之后进行真空操作,以恢复空间并提高查询性能。
本质上,这类似于Postgres中潜在的MVCC机制。然而,我无法确认Redshift支持MVCC。我需要的是确认Redshift上的并行读和写事务不会干扰,因为它们是在独立的行版本上操作的,因此问题是:
亚马逊红移支持MVCC吗?
发布于 2017-04-06 12:36:32
问完这个问题后,我很快就在Redshift文档中找到了答案。这一章被称为管理并发写操作:
Amazon允许在表被增量加载或修改时读取它们。在一些传统的数据仓库和商业智能应用程序中,只有在夜间加载完成后,数据库才可供用户使用。在这种情况下,在运行分析查询和生成报告时,不允许在正常工作时间内进行更新;然而,越来越多的应用程序在一天甚至一整天的长时间内继续运行,从而使加载窗口的概念过时。Amazon支持这些类型的应用程序,允许在逐步加载或修改表时读取它们。查询只是查看数据的最新提交版本或快照,而不是等待下一个版本被提交。
它对应于维基百科的MVCC定义:
MVCC ...方法:每个连接到数据库的用户都会在特定的时间内看到数据库的快照。在更改完成之前,数据库的其他用户不会看到写入器所做的任何更改(或者,从数据库的角度来说,直到事务提交为止)。当MVCC数据库需要更新数据项时,它不会用新数据覆盖旧数据,而是将旧数据标记为过时,并将更新版本添加到其他地方。因此,有多个版本存储,但只有一个是最新版本。这允许读者访问当他们开始阅读时存在的数据,即使这些数据是由其他人修改或删除的。
与我在问题中发布的Redshift空白描述有关,它让我相信Amazon确实支持MVCC。尽管我仍然无法在Redshift的官方文档中找到任何关于MVCC的内容。
https://dba.stackexchange.com/questions/169229
复制相似问题