有一个 CAP 定理:R + W > N。假设我有 W=1(主),R = 6(从),N = 6,所以一个从可以读写。正如定理所说,我们可以确保强一致性(我们总是会得到最新的值)。
我读到数据存储可以检查版本并返回最新版本。但实际上使用 MySQL 是真的吗?或者,也许我们需要使用任何类型的中间人?CAP 定理如何应用于 MySQL?
有一个 CAP 定理:R + W > N。假设我有 W=1(主),R = 6(从),N = 6,所以一个从可以读写。正如定理所说,我们可以确保强一致性(我们总是会得到最新的值)。
我读到数据存储可以检查版本并返回最新版本。但实际上使用 MySQL 是真的吗?或者,也许我们需要使用任何类型的中间人?CAP 定理如何应用于 MySQL?
尝试使行保持一致,然后引用之前的行。
CREATE TABLE transactions (
id int PRIMARY KEY
GENERATED BY DEFAULT AS IDENTITY,
account_id bigint REFERENCES account,
change integer NOT NULL,
balance integer NOT NULL,
)
来自客户端的查询基本上是
SELECT balance
FROM transactions
WHERE account_id = X
ORDER BY id DESC
LIMIT 1;
INSERT INTO transactions (account_id, change, balance)
VALUES (X, 100, $balance + 100);
此代码将在并发插入时产生不正确的结果。那么,问题是如何让余额计算永远正确呢?
会INSERT INTO ... SELECT(...)
够吗?
假设我们有三个节点(没有分片的简单副本),即 N1、N2 和 N3,复制因子为 3。
由于读写请求可以到达任何节点,Say Request 写请求(同时更新同一条记录)来来去去节点 N1。
读取请求来读取相同的文档并转到节点 N2。我相信它会返回陈旧的数据,因为写入还没有复制到 N2 吗?考虑我没有调整读写问题的默认配置。
我相信步骤 2 中的问题可以通过以下任一选项解决
一个。在同步复制中,有利于强一致性但不利于性能
b. 如读写一致性中所述调整读写一致性
C。在分片的帮助下(如果需要),分片键将确保所有读写都转到特定节点的特定分片键?
我对第2点和第3点的理解正确吗?
我是分布式数据库的新手,有几件事我想不通。
我们正在开发一个应用程序,需要选择合适的数据库,这个应用程序需要与用户相关的财务数据的强一致性,比如存款和取款。我想知道Cassandra 中的可调一致性,特别是法定人数级别的一致性。
想象以下场景:
复制因子为3。
用户John在所有副本上的初始余额为10 。
在时间t1,John 的余额正在发生更新,将其减少到7(CL=quorum),
同时,在时间t1,读取操作正在运行,并且在quorum上设置了一致性级别,在这种情况下为2。执行更新
查询
的节点上的副本是否可能未被选择用于仲裁?如果是这样,由于没有写锁
而假设操作结果为 10 是否正确?
总的来说,我想知道约翰是否有可能以某种方式利用这一点并花费超过他账户余额的钱。
谢谢。read
我正在使用一个包装 SQL 语句的应用程序(MapServer - http://mapserver.org/),因此 ORDER BY 语句位于内部查询中。例如
SELECT * FROM (
SELECT ID, GEOM, Name
FROM t
ORDER BY Name
) as tbl
该应用程序有许多不同的数据库驱动程序。我主要使用 MS SQL Server 驱动程序和 SQL Server 2008。如果在子查询中找到 ORDER BY,则会引发错误。
从 MS Docs (虽然这似乎仍然适用于 SQL Server 2000):
当您在视图、内联函数、派生表或子查询中使用 ORDER BY 子句时,它不保证有序输出。相反,ORDER BY 子句仅用于保证由 Top 运算符生成的结果集具有一致的构成。ORDER BY 子句仅在最外层的 SELECT 语句中指定时才保证有序的结果集。
但是,在 Postgres (9) 和 Oracle 中运行时,相同类型的查询会返回结果 - 其顺序与子查询中定义的顺序相同。在 Postgres 中,查询计划显示结果已排序,并且 Postgres 发行说明包括暗示使用子查询订单的项目:
子查询 ORDER BY 匹配上层查询时避免排序
http://en.wikipedia.org/wiki/Order_by状态:
尽管某些数据库系统允许在子选择或视图定义中指定 ORDER BY 子句,但其存在没有任何影响。
但是,根据我自己对查询计划的检查:
所以我的问题是有任何链接可以正式确认或否认 Postgres 和 Oracle 不允许在子查询中排序?