- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我阅读了有关 Cassandra DB 的主题。它写道,它适用于不需要 ACID 属性的应用程序。
Is there any application or situation that ACID is not important?
最佳答案
有许多(大多数?)场景不需要 ACID。例如,如果您有一个产品数据库,其中一个表是 id -> description,另一个是 id -> todays_price,还有一个是 id -> sales_this_week,那么在更新某些内容时不需要锁定所有表。即使(出于某种原因)这三个表之间存在一些共同的数据位,根据使用情况,让它们不同步几秒钟也可能不是问题。也许在汇总报告时仅在月底才需要每月销售额。不符合 ACID 意味着不一定满足 ACID 的所有四个属性......在大多数业务案例中,只要事情最终彼此一致,它可能就足够了。
值得一提的是,影响同一个 cassandra 分区的提交是原子的。如果某些东西确实需要原子一致,那么你的数据模型应该努力将那部分信息放在同一个分区中(因此,在同一个表中)。当我们在 cassandra 上下文中谈论最终一致性时,我们指的是影响不同分区(可能是同一个表中的不同行)的事情,而不是同一个分区。
“交易”的典型例子是从一个账户借记,从另一个账户贷记……这很“重要”,因为“银行”。实际上,这不是银行的运作方式。这样的系统确实需要一个明确的交易列表(读取传输)。如果你要为 cassandra 建模,你可以有一个包含(from_account、to_account、金额、时间等)的转账表。这些记录将是原子一致的。您的“帐户”表将从该传输列表中更新。这需要多长时间才能反射(reflect)出来取决于业务。例如,在英国,从劳埃德银行到劳埃德银行的转账几乎是即时的。而一些银行间转账可能需要几天时间。在后者的情况下,您的账户余额通常显示未扣除的待转账金额,而单独的“可用余额”考虑待转账。
不同的事物以不同的延迟运行,在某些情况下是 ACID,因此所有更新记录之间的即时一致性可能很重要。但是对于很多其他人来说,特别是在处理具有大量数据的分布式系统时,可能不需要数据库级别的 ACID。
即使在需要“可见一致性”的地方,它通常也可以通过应用程序级别的协调机制、CRDT 等来处理。对于最终用户来说,系统是原子的——要么成功,要么不成功,并且用户得到确认。在内部,系统可能正在更新多个数据库、处理外部服务等,只有在一切顺利时才确认。因此,表中不同行的 ACID,单个数据库中跨表,甚至多个数据库的 ACID 可能不足以实现外部可见的一致性。 Cassandra 具有可调的一致性,您可以在其中使用数据建模,并进行权衡以制作满足业务需求的“足够好”的系统。但是,如果您需要跨表的 ACID 事务性——Cassandra 不适合该用例。但是,您可以在 cassandra 的约束范围内对您的业务需求进行建模,并使用它来获得它提供的其他可扩展性优势。
关于sql-server - 什么时候 ACID 不重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50718771/
假设我使用的是标准 SQL 引擎(例如 Postgres、MySQL...)。 如果我没有明确说“开始交易”和“结束交易”进行查询时 (如“插入学生......”), 会“安全”吗? 我会失去 RDB
我正在开始一个项目的研究,该项目需要在其数据库上提供ACID语义。 由于数据的性质,它不适合存储在常见的现成系统(关系或键值)中。 关于如何实现必须提供ACID语义的系统,有哪些好的资源? 我典型的G
DBMS 的原子性和隔离性之间的区别有些模糊,所以我想知道两者之间的明显区别? 原子性和隔离性在经典数据库事务中通过使用提交协议(protocol)得到保证。该协议(protocol)用于将临时存储变
抱歉这个无知的问题,但是什么样的应用程序不需要符合 ACID 的数据库服务器?我有 SQL Server 背景,其中 ACID 一直“存在”,现在研究其他 DBMS 让我思考。我能想到的大多数应用程序
ACID和数据库事务有什么关系? ACID 是给数据库事务还是一回事? 谁能启发这个话题。 最佳答案 ACID是您希望在修改数据库时应用的一组属性。 原子性 一致性 隔离 耐用性 事务是一组相关的更改
过去几个月我一直在研究微服务架构应用程序,我仍在努力适应分布式特性。我多次注意到一种模式,但我不确定处理它的首选方式是什么。 假设我们有服务 A、服务 B 和服务 C。服务 A 公开了一个 API,其
我经常读到,CQRS 的一大优势是在读取端拥有非规范化数据。例如。可以存储冗余的数据字段和子对象以避免连接。但这也意味着单个事件可能会导致读取端发生多个更新操作,因为实体的状态更改必须反射(refle
我经常读到,CQRS 的一大优势是在读取端拥有非规范化数据。例如。可以存储冗余的数据字段和子对象以避免连接。但这也意味着单个事件可能会导致读取端发生多个更新操作,因为实体的状态更改必须反射(refle
任何人都知道提供对一致性保证的精细控制的消息总线实现? Full ACID 太慢,没有 ACID 太错误。 我们目前正在使用 Rhino ESB 包装 MSMQ 进行消息传递。在分布式事务中使用持久的
我有一个多线程 java 应用程序,它在 MySQL 数据库上执行大量并行 CRUD 操作。正如MySQL手册中所读到的,InnoDB表结构应该确保事务按照ACID原则执行。但我仍然遇到问题,因为有时
我的交易应用程序是这样工作的: try { $db->begin(); increaseNumber(); $db->commit(); } catch(Exceptio
http://imgur.com/IZgvl 大家好,我一直在从 Wiley 的 MySQL Administrator's Bible 学习 MySQL(完全没有使用 PHP 的经验)。如果我提出的
背景: 我通过串行连接从 arduino 获取温度 float 。我需要能够每 30 秒缓存一次此温度数据,以便其他应用程序(例如网络、恒温器 Controller )访问并且不会使串行连接过载。 目
我正在查看有关事务的 ACID 属性,并在不同站点上遇到了以下声明ACID 是事务保证的四个属性的首字母缩写:原子性、一致性、隔离性和持久性。 **我的问题专门针对这个短语。 guaranteed b
我在 hadoop 集群上工作,hortonworks 2.4 发行版。我想对 Hive 表进行 ACID 操作。这是我的声明: CREATE TABLE myAcidTable (..) CLUST
我试图了解 ACID 事务,但我对持久性一无所知。 据我所知,持久性可确保保存所有已完成的交易,即使发生某种技术故障。即使发生某种技术故障也能获救意味着什么。例如,如果我的服务器在事务期间崩溃,在将数
我如何为我的数据库实现 ACID 属性 -A-原子性,C-一致性,I-隔离性,D-持久性。正在使用的数据库系统 - MySql。 最佳答案 ACID 不是您可以实现的模型,而是数据库服务器必须遵守的一
我是 Aerospike 的新手。 我想知道在所有可能的超时情况下,如该链接所述: https://discuss.aerospike.com/t/understanding-timeout-and-
具体来说,是否存在数据丢失的风险?我正在考虑运行一个密集的事务处理系统,在这个系统中,不丢失任何东西是至关重要的。是否有 NoSQL 用于银行交易处理等任务关键型应用程序的示例? 最佳答案 坦率地说,
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!