问题标签 [acid]
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.
sql-server - 如果在运行时更改存储过程会发生什么?
我对我想尽快部署到生产 SQL Server 2005 服务器的存储过程进行了细微的一行更改(修复了字符串中的拼写错误)。
我担心的是,如果在确切的时间运行 alter 语句来更新我的存储过程,会发生什么同时调用该存储过程?
它是否与存储过程的先前副本一起运行,还是会导致某些损坏或错误?
考虑到 SQL Server 的 ACID 特性,我希望它是安全的。它同时运行的机会,特别是因为 SP 非常小,所以非常低,但我只是更愿意确定,而且我也对答案感兴趣,只是为了教育目的。
可以说,ServerFault 会是一个更好的地方,如果它被错误发布,对不起。
谢谢你。
java - 数据库实现在 JDBC 连接中设置的事务隔离级别的各种方式
我们可以在 JDBC 连接上设置事务隔离级别,以控制对并发事务之间公共记录的读/写访问的可见性级别。数据库实现这一点的一种方法是在记录/表上放置不同类型的锁。
但是数据库还有其他方式实现这些事务级别吗?
mysql - RDBMS 规范化与性能
我们正在编写一个MMORPG并假设我们有以下表格。这location_dynamic_objects
是要大量查询和更新的表。如您所见position_x
,position_y
列location_id
和对象类型都是重复的。但是,如果我们规范化并使用连接,我们将为选定的数据应用额外的过滤器。我们计划将所有location_static_objects
ONCE 发送给客户,因此将它们与location_dynamic_objects
. 静态对象表示要渲染的不可移动数据,并在位置加载时向客户端发送一次。动态对象代表经常更新的数据,如玩家、火箭、小行星等,并不断发送给客户端,选择取决于客户端的位置和位置。我们的问题是我们应该放弃规范化来实现性能吗?
database - App Engine Datastore 上的最终一致性能否解释这种奇怪的行为?
我已经实现了两个服务器端 HTTP 端点,它们 1)存储一些数据并 2)处理它。方法 1) 通过App Engine 任务调用方法 2),因为它们是我不希望客户端等待的耗时任务。该过程在下面的序列图中进行了说明。
现在我不时遇到处理任务(在下面的序列图中名为processSomething)在尝试处理时找不到数据 - 如下图黄色throw WtfException()
所示。这可以用这里描述的最终一致性模型来解释吗?
该文档说读取的强一致性,但写入的最终一致性。我不确定这与此案有关的确切含义。任何澄清表示赞赏。
编辑:我意识到我在这里问的是一个布尔问题,但我想我正在寻找一个答案,其中包含一些关于最终一致性通常是什么的文档,特别是在 Google Datastore 上
编辑 2:根据要求,这里是有关实际读/写操作的详细信息:
写操作:
我正在使用 JPA 进行数据持久性。对象“手”是从客户端收到的,并且之前没有存储在数据库中,因此Id
将分配一个新密钥。
读取操作:
主键也不GameId
是。RoundNo
GameId 是一个“外键”,尽管 Datastore 在设计上没有注意到这一点。
haskell - 我想使用酸存储 aeson 的值类型
我想使用酸商店存储 aeson Values。我采用了最小的酸实现,并试图天真地将类型切换到值。这些是我对 derivedSafeCopy 的调用:
JSONState 和 JSONStateStore 是我自己的类型。我收到此错误:
sql-server - 如何立即提交存储过程?
编辑这个问题不再有效,因为问题是别的。请在我的回答中查看下面的解释。
我不确定礼仪,所以我将把这个问题留在当前状态
我有一个将一些数据写入表的存储过程。
我正在使用 Microsoft Practices Enterprise 库进行存储过程调用。我使用对 ExecuteNonQuery 的调用来调用存储过程。
在 ExecuteNonQuery 返回后,我调用了第 3 方库。它会在大约 100 毫秒后在一个单独的线程上回叫我。
然后我调用另一个存储过程来提取我刚刚编写的数据。在大约 99% 的情况下,数据会返回。有时它不返回任何行(即它找不到数据)。如果我在调试器中设置条件断点来检测这种情况并手动重新运行存储过程,它总是返回我的数据。
这让我相信写入存储过程正在工作,只是在调用时没有提交。
当谈到 sql 时,我是相当新手,所以我完全有可能做错了什么。我原以为写入存储过程会阻塞,直到其内容提交到数据库。
编写存储过程
读取存储过程
database - 银行透支罚款是否与技术限制有关?
我一直在阅读一篇关于银行业务中数据一致性的文章。作者强调了一个事实,即银行采用BASE(基本可用,软状态,最终一致)交易来确保其服务的高可用性,这与通常的想法不同。
简而言之,事务被写在不同的分区中以允许快速响应,然后执行数据库一致性。
例如,当您从 ATM 取款时,目的是尽快将钱取回。因此,您的交易操作被单独存储,资金被释放,然后他们注意将交易应用到数据库并使其保持一致。
这是因为通信中的技术限制:如果使用ACID(原子性、一致性、隔离性、持久性)事务,
则无法提供响应式服务。
这当然意味着可能存在不一致:您提取的资金可能会超过可用的资金,而他们无法提前知道,在交易变得一致之前。透支罚款来了,这是你为“透支”支付的费用。
现在的问题是:银行是否引入了“透支”技巧,因为他们从一开始就意识到他们必须面对的限制?就像一种黑客攻击克服技术沟通问题并同时提供可用性?或者它只是另一种“赚钱”的方式,无论如何都会被引入?
在我看来,在这种情况下,这两种选择都同样值得。我的意思是,它们都可以大大提高收入。
java - HBase:原子“检查行不存在并创建”操作
我建议这应该是常见的情况之一,但可能我在谷歌搜索时使用了错误的关键字。
我只需要用完全随机的键创建新的表记录。假设我获得了具有良好随机性(几乎随机)的密钥。但是我不能 100% 确定没有行存在。所以我需要原子地做:
- 行键检查不存在行。
- 如果行存在则拒绝操作。
- 如果它不退出,则创建行。
我在这个主题上找到的最有用的信息是关于HBase 行锁的文章。 我认为 HBase 行锁是合适的解决方案,但我想在没有显式行锁定的情况下做得更好。
- ICV 看起来不合适,因为我确实希望密钥是随机的。
- 如果 CAS 可以在“行不存在”的条件下工作,那么他们会很棒,但看起来他们不能。
- 显式行锁具有区域拆分问题等缺点。
有人可以添加有用的建议吗?优选的 API 是基于 Java 的,但实际上它更多的是关于概念而不是实现。
database - CAP 定理是否暗示 ACID 对于分布式数据库是不可能的?
尽管有 CAP 定理,但仍有NoSQL ACID(分布式)数据库。这怎么可能?CAP 定理和(可能/不可能)是 ACID 之间的关系是什么?
分布式计算机系统不可能同时提供一致性、可用性和分区容错性。
node.js - 在 Node.js 中事务性地写入文件
我有一个 Node.js 应用程序,它将一些配置数据存储在一个文件中。如果更改某些设置,配置文件将写入磁盘。
目前,我正在使用一个简单的fs.writeFile
.
现在我的问题是:当 Node.js 在写入文件时崩溃时会发生什么?是否有机会在磁盘上有损坏的文件?或者 Node.js 是否保证文件是以原子方式编写的,以便旧版本或新版本都有效?
如果没有,我该如何实施这样的保证?有没有这方面的模块?