问题标签 [data-consistency]

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.

0 投票
2 回答
2612 浏览

postgresql - 验证两个 postgresql 数据库之间的数据一致性

这特别是关于保持对使用各种复制解决方案的信心,您可以在不丢失数据的情况下故障转移到其他服务器。或者在主-主情况下,如果其中一个数据库不同步,您可以在合理的时间内知道。

是否有任何工具可以解决这个问题,或者人们通常依赖复制系统本身来警告不一致?我目前最熟悉在主备设置中的 postgresql WAL 运输,但我正在考虑使用 PgPool 之类的主主设置。但是,由于该解决方案与 PostgreSQL 本身的直接联系不太直接(我的基本理解是它提供了应用程序将使用的连接,因此拦截了各种 SQL 语句,然后将它们发送到其池中的任何服务器) ,它让我更多地思考如何实际验证数据一致性。

具体要求:

  1. 我不是在谈论表结构。我想知道实际的记录数据是相同的,以便我知道记录是否已损坏或丢失(在这种情况下,我将使用最近的备份 + WAL 文件重新初始化坏数据库,然后再将其恢复进入游泳池)

  2. 数据库大小为 30-50 GB。我怀疑原始的 SELECT 查询会很好地工作。

  3. 我认为不需要实时检查(尽管它当然会很好)。每小时甚至每天都比没有好。

  4. 块级检查不起作用。这将是两个具有独立存储的数据库。

或者这种类型的验证根本不现实?

0 投票
0 回答
333 浏览

database - 更新 memcached 条目

我目前正在开发一个针对阅读进行优化的系统。该架构是一个 MySQL 作为权威的持久存储,以及 MySQL db 和客户端之间的 memcache 层。写入不时发生,但比读取频率低得多。

数据库在相对较弱的主机上运行,​​因此我有动力尽量减少对数据库的访问。目前我心目中的协议是这样的:

[DB 和 memcache 条目都与乐观锁定的版本控制序列相关联]

  1. 在启动时,一个专用进程将所有当前条目从 db 加载到 memcache。
  2. 当发生写入时,它将:
    • 一个。从 memcache 加载条目版本(memcache 版本)。
    • 湾。在 db 事务中,尝试更新 db if (db entry version < loaded memcache version + 1),成功后 db entry version 将更新为 (memcache version + 1)。
    • C。如果 b 成功,继续使用新条目和 version = (memcache version + 1) 更新 memcache
  3. 同时,专用进程会定期从 db 中加载所有数据并将它们放入 memcache,以防某些写入不会传播到 memcache。可能会导致 2 出现一些竞争条件,但我估计这是可以接受的。

我当前的假设是,对于任何时候的条目,(memcache 版本)<=(db 版本),因此来自 2 的多个并发写入不会导致竞争条件。

有人能从这个设计中发现任​​何问题吗?谢谢!

0 投票
1 回答
652 浏览

c - Lua (LuaJit) 和 C 中的对象生命周期

我使用LuaJit来扩展一个普通的 C 应用程序(使用 Lua C API)。宿主应用程序确实为我在 Lua 中为其编写包装器的许多对象管理内存。

现在我希望能够从 lua 函数中删除对象,即实现一个删除函数。我想用下面的问题大纲来说明手头的问题。

基本上我的 lua 用户数据结构看起来像这样。

whereobj_db_index是本地对象数据库的索引。使用 Lua C API,我创建了一个 lua 函数query_object(...),它基于此用户数据检索 lua 元表,并提供用于管理 db 对象的 API。

我现在计划my_db_object:delete()在元表 API 中引入一个方法。可以通过用另一个成员变量覆盖变量或设置另一个成员变量:delete()来使其无效。然而问题是,所有对已删除对象的引用都应该失效。考虑这个 lua 代码:my_db_object0

现在我想知道如何解决这个潜在的冲突。两个主要问题是:

  • 无效的obj_db_index可能是无效的索引。这实际上可能已经被代码捕获了,所以它不是很漂亮但还可以

  • 删除后,索引可能会被重用,当其他引用仍然使用旧索引时,这可能会导致细微的错误。

有什么策略来解决这个问题?

我的想法可能有点费时,但如果删除,这将是可以的:

  • 我可以对用户数据对象执行一些自省吗?就像迭代所有具有相同类型的用户数据对象以便在my_db_index触发删除时失效
0 投票
1 回答
586 浏览

php - 数据库中的用户表已更改,如何更新会话?

目前,当用户登录我的站点时,会启动一个(PHP)会话,并且他的数据库行保存在他的 $_session 中。我这样做是因为现在用户数据的大小很小,这样我就不必每次需要时都向数据库询问用户数据。

问题是,当我想在开发过程中添加或更改某些内容并触摸数据库时,会话不会以这种方式更新。用户必须注销并再次登录才能更新会话。现在这很好,因为该站点处于开发阶段,但在生产中这是不可取的。

我不会删除会话文件,因为人们很懒惰,我会避免在每次数据库发生更改时强制他们重新登录,而且我不想每 X 分钟重新加载一次会话。我现在的解决方案是用户表中的布尔列,默认为 false,我在更改数据库时设置为 true。每次会话继续时,如果该值变为真,会话数据将被更新。无论如何,每次用户继续会话时,我都必须进行(小)查询。我不知道这是否会成为生产中的问题。

有没有替代/更好的方法来解决我的问题?

0 投票
2 回答
136 浏览

php - 他所有会话之间的用户数据的一致性

我正在用 PHP 开发一个网站。当用户会话开始时,我将他的所有数据库行加载到 $_SESSION 变量中。当用户更改数据库值时,我也会更新 $_SESSION var。

当同一用户有多个会话处于活动状态时,问题就开始了。有没有办法在不使数据库超载的情况下更新同一用户的所有会话的数据?或者,有没有办法强制 php 对属于同一用户的所有会话使用相同的会话文件?或者我必须在每次会话继续时简单地查询数据库?

另一个难题是:值得吗?我的意思是,我不知道这种机制能在多大程度上减轻服务器负载,也不知道这种机制是否适用于基于文件的会话,或者我必须使用另一种会话存储类型。

这个问题与我的另一个问题有些相关(即使解决方法只是删除所有会话文件)。

0 投票
3 回答
4006 浏览

python - 将元组添加到集合中的最佳实践是什么?

考虑这个例子:

在不将它们与第一个分开的情况下,将tuples长度 2添加到 a 的最佳方法是什么?结果应如下所示:setadd

0 投票
2 回答
3354 浏览

web-services - 如何避免向 Web 服务发送 2 个重复的 POST 请求

我发送一个 POST 请求来创建一个对象。该对象已在服务器上成功创建,但我无法接收响应(丢弃在某处),因此我尝试再次(一次又一次)发送 POST 请求。结果是服务器端有很多重复的对象。

处理该问题的官方方法是什么?我认为这是一个非常普遍的问题,但我不知道它的确切名称,所以无法谷歌它。谢谢。

0 投票
1 回答
154 浏览

mysql - 用于导入表的一部分 mysql 转储的 shell 命令(从特定行)

具体来说:

是否有一个反向命令:

我可以通过 shell 导入表转储的一部分(从特定行开始)吗?

情况:有一个像样的(2G)数据库可以从 PC 导入到 lynux mysql,我成功地使用 shell 命令导入了该表的大约 30%,然后我与 ISP 的连接中断了。

问题:

我希望继续从它停止的行上传转储。我特别不想从导入停止的行创建一个新的转储。

0 投票
1 回答
152 浏览

algorithm - 数据一致性算法

我正在开发 2-4 人网络游戏。该模型的核心是一个数据结构,其行为类似于 google-docs 电子表格,每个人都可以随时对其进行编辑。为简单起见,每个电子表格单元格只能包含一个字母。

一些能力和要求: 1.所有玩家都可以随时编辑电子表格单元。(这意味着不能有“锁定的单元格”) 2. 所有网络事务都是可靠的(但可以乱序到达)

我很难开发一种算法来处理类似电子表格的共享数据结构。是否有人熟悉类似问题并有解决方案?或提出解决问题的简单方法?

谢谢你。

0 投票
1 回答
179 浏览

cassandra - 您将如何向没有分布式存储系统背景的观众解释数据(不)一致性?

数据一致性是分布式存储系统中的一个重要问题,如Amazon DynamoDBCassandraRiakWindows Azure等。它带有用于提供高性能、容错性和可扩展性的复制技术。

数据一致性模型作为表征数据一致性问题的一种形式化方法。然而,向没有分布式存储系统背景的观众解释往往过于正式,更不用说最终一致性、因果一致性、顺序一致性等概念了。

因此,非正式的解释会更好。此外,一个合格的解释最好涵盖以下三个关键点:

  1. 简单的示例、漂亮的数字和简洁的说明来说明数据(不)一致性问题。
  2. 传达同时存在弱(不)一致性和强(不)一致性的想法。
  3. 显示数据(不)一致性对用户或应用程序程序员的影响。