AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 61628
Accepted
Martin
Martin
Asked: 2014-03-25 08:12:19 +0800 CST2014-03-25 08:12:19 +0800 CST 2014-03-25 08:12:19 +0800 CST

你能从 ACID 中降低一致性吗?

  • 772

在他的“数据库系统简介”一书中,CJDate 写了一个关于 ACID 原则的章节,称为“Dropping ACID”。在本章中,他称正确性(一致性)“本质上毫无意义”,而其他原则至多是“一种迫切需要”。

这本书是 2004 年出版的,我在互联网上的任何地方都将 ACID 原则视为 RDBMS 应用程序编程的指南。这是否意味着 Date 对 ACID 的想法没有被接受?或者从理论的角度来看,ACID 是否不像在阅读有关数据库编程的 Internet 文档时看起来那样强制性?

我希望我的问题有意义并且在正确的论坛中。

acid
  • 3 3 个回答
  • 886 Views

3 个回答

  • Voted
  1. Best Answer
    Ulrich Thomas Gabor
    2014-03-25T09:18:16+08:002014-03-25T09:18:16+08:00

    书的内容

    作者从非常理论的角度分析了ACID的概念。

    最重要的部分可能是本章最后一段的第一句话:

    总的来说,我们得出结论,从实用的角度来看,交易概念比从理论上更重要。

    另一个重要部分是他引入了“多重赋值”运算符(第 487 页),他将其用作解决实际 DBMS 通过支持事务处理的一些问题。此操作在MySQL、Oracle或MSSQL中似乎不起作用。(使一次查询更新多个表成为可能。)

    他的陈述是:如果我们有这个多重赋值运算符,则不需要延迟检查约束并且应该立即应用而不是在事务结束时应用。后一个导致 ACID 的C变得无用,因为数据库总是一致的(如果 C 代表一致性)或者它的正确性是不可执行的(如果 C 代表正确性)。

    关于隔离,他声称这应该意味着所有事务都应该完全不知道其他事务可能正在运行。这可能是行不通的。他进一步指出,大多数 DBMS 都提供“隔离级别”设置,这从根本上破坏了这个概念。

    如果支持嵌套事务,他写的持久性只能应用于最外层的事务。

    根据他的说法,只有当需要交易时才需要原子性。如果多重赋值运算符可用作原子,则不需要原子事务。

    带走什么

    这是关于 ACID 概念的非常基础的讨论。在不判断他的批评是否正确的情况下,有一个基于事务的 DBMS 的活生生的景观。

    CJ Date 自己写道,“我们现在对这项研究所依据的一些假设有了更好的理解”。这意味着它是基本方面之一,在实时 DBMS 中无法轻易更改。删除事务并推入原子多重赋值运算符,没有企业会想要更新其架构,因为这是很多变化。

    因此,您已经阅读了一个理论章节,该章节宣告了如何从概念上改进 DBMS 的属性,并且从根本上消除了一些问题。但只是因为有些东西可能更胜一筹,所以不会马上付诸实践。

    你基本上已经达到了纯粹理论观点的人与实际世界之间的边界,其中不仅仅是理论,而是一个必须环绕的现有世界。

    • 8
  2. RolandoMySQLDBA
    2014-03-25T09:07:34+08:002014-03-25T09:07:34+08:00

    ACID的一致性部分与事务之前、期间和之后的数据状态有关。

    当涉及到引用完整性时,外键应该正确连接,没有丢失任何键。这意味着围绕级联规则、触发器和约束的每个操作都必须是全有或全无(从头到尾,或者一路倒退,这样信息前后看起来都一样)。在许多情况下,一致性可能超出 RDBMS 的范围并在应用程序级别强制执行。为什么?

    业务逻辑可能会变得越来越复杂,并且需要应用程序编码来消除 RDBMS 的一致性,尤其是在存储过程不够强大且业务逻辑可以由客户端完成的情况下。

    可以说 ACID 的一致性完全适用于 RDBMS 内部的所有操作(级联规则、触发器、约束、存储在 DBMS 中的 BI)。除此之外,任何 BI 的使用都会使 ACID 的一致性变得毫无意义。毕竟,一旦在应用程序级别处理了数据的一致性,您就可以像使用 MySQL 和 SQLite 一样使用 Oracle 和 SQL Server 处理数据。

    数据库设计和应用程序设计需要进行大量的深思熟虑。因此,你可以说

    • 数据在持有者的眼中(DBMS)
    • 数据在编码员的眼中(应用程序)

    如需进一步的观点,请参阅我的旧帖子What are the arguments against or for putting application logic in the database layer?(以及提供的其他答案)看看 DBA 和开发人员有哪些定义一致性的纠缠以及我的另一篇旧文章你应该在编写应用程序代码之前设计数据库吗?(以及提供的其他答案)。

    • 2
  3. mustaccio
    2014-03-25T09:09:42+08:002014-03-25T09:09:42+08:00

    我想关键是在现实生活中,由于工程限制和应用程序功能和非功能要求,SQL 数据库无法在其理论范围内完全实现该原则。想想“脏读”、嵌套事务、延迟约束、进程和线程同步限制等。

    • 0

相关问题

  • ACID 和 CAP 定理的一致性,它们是一样的吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve