问题标签 [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.
memory - cudaHostAllocMapped 的一致性规则
有谁知道有关分配给内存区域的内存一致性模型保证的文档cudaHostAlloc(..., cudaHostAllocMapped)
?例如,当来自设备的写入对来自主机的读取变得可见时(可能是在内核完成之后,在内核执行期间的最早可能时间等)。
string - 在 Matlab 中清理字符串以进行比较
这是考虑的后续问题evalc
,而不是手动处理文件描述符。您可以在下面看到一个关于消毒不良的示例。我想删除诸如尾随字符、所有空格、所有换行符等 - 通常会导致意想不到的事情 -是否有现成的清理命令来执行此操作?
cassandra - Run Single node Cassandra cluster and do queries with QUORUM consistency?
I'm trying to setup a simple and "lightweight" development/testing environment for my application where I could run single node Cassandra cluster with key space where 'replication_factor':'1'
.
But when I do CQL query with QUORUM consistecy then I still get an error for not having two nodes in my cluster:
Any way to allow queries to work with QUORUM consistency level in this one node setup or is only fallback to use ONE (or add second node to cluster)?
database - 处理 Cassandra 写入失败的常见做法是什么?
在文档 [1] 中,据说
所以假设只有 2 个副本收到更新,写入失败。但由于最终一致性,所有节点最终都会收到更新。
那么,我应该重试吗?还是就这样吧?
有什么策略吗?
concurrency - Memcached 中如何处理并发更新?
我的理解是 Memcached 是无锁的(在其默认配置中),因此没有客户端可以阻止任何其他客户端的操作。如果是这样,那么 Memcached 如何处理两个或多个客户端同时尝试更新同一个对象?
Memcached 如何处理一个对象的多个版本?只需获取最后完成更新的版本并将其他版本从缓存中逐出?数据库是否主动使缓存在 Memcached 服务器上的对象失效?
mongodb - 结合 Neo4J 和 MongoDB:一致性
这些天我在做很多实验,我想做的一件事就是结合两个流行的 NoSQL 数据库,即 Neo4j 和 MongoDB。仅仅因为我觉得它们完美地互补。Neo4j 中的一等公民,即关系,正是 MongoDB 中缺少的东西,而 MongoDb 允许我不在我的节点属性中放置大量数据。
所以我试图将两者结合在一个 Java 应用程序中,使用 Neo4j Java REST 绑定和 MongoDB Java 驱动程序。我所有的域实体都有一个唯一标识符,我将其存储在两个数据库中。其他数据存储在 MongoDB 中,实体之间的关系存储在 Neo4J 中。例如,两个数据库都包含用户 ID,MongoDB 包含个人资料信息,Neo4J 包含友谊关系。使用我编写的自定义数据访问层,这完全符合我的要求。而且速度很快。
但是......当我想创建一个用户时,我需要在 Neo4j 中创建一个节点和在 MongoDB 中创建一个文档。不一定是问题,除了 Neo4j 是事务性的而 MongoDB 不是。如果两者都是事务性的,我会在其中一个事务失败时回滚这两个事务。但由于 MongoDB 不是事务性的,我不能这样做。
我如何确保每当我创建用户时,要么同时创建节点和文档,要么两者都不创建。我不想最终得到一堆没有匹配节点的文档。
最重要的是,我不仅希望我的组合数据库交互符合 ACID,还希望它是线程安全的。GraphDatabaseService 和 MongoClient / DB 都是由单例提供的。
我发现了一些关于在 MongoDB 中创建“事务文档”的内容,但我真的不喜欢这种方法。我想要一些漂亮干净的东西,比如 neo4j beginTx、tx.success、tx.failure、tx.finish 设置。理想情况下,我可以在同一个 try/catch/finally 块中实现一些东西。
我是否应该切换到 CouchDB,这似乎是事务性的?
编辑:经过更多的研究,由评论引发,我开始意识到 CouchDB 也不适合我的特定需求。澄清一下,Neo4j 部分是一成不变的。Document Store 数据库只要有 Java 库就行。
caching - 如何确保具有高可用性的聚合的一致性?
我的团队需要找到解决以下问题的方法:
我们的应用程序允许用户查看企业的总销售额、产品总数、区域总数、区域 x 产品总数、区域 x 部门总数等。你明白了。有太多的值需要聚合才能得到其中许多无法即时计算的总数——我们必须预先聚合它们以提供合适的响应时间,这个过程大约需要 5 分钟。
这个问题,我们认为是一个常见的问题,但找不到参考,是如何在不关闭用户的情况下允许更新各种销售。此外,用户不能接受最终的一致性——如果他们向下钻取总共 12 个,他们最好看到加起来为 12 的数字。所以我们需要一致性 + 可用性。
到目前为止,我们提出的最佳解决方案是将所有查询定向到冗余数据库“B”(针对查询进行了优化),而将更新定向到主数据库“A”。当我们决定花 5 分钟更新所有聚合时,我们更新数据库“C”,它是另一个冗余数据库,就像“B”一样。然后,新用户会话被定向到“C”,而现有用户会话继续使用“B”。最终,警告任何使用“B”离开的人,我们终止“B”上的会话并在那里重新聚合,交换“B”和“C”的角色。典型的排水停止场景。
我们很惊讶我们找不到任何关于此的讨论,并担心我们过度设计了这个问题,或者这可能不是我们认为的问题。非常感谢任何建议。
mysql - mysqldbcompare 实用程序的问题。数据库一致性检查每次都失败
我正在尝试使用 mysqldbcompare 实用程序比较两个本地数据库。检查总是显示数据库一致性检查失败。我试过检查和修复命令。但无济于事。
我使用了以下代码并得到
我对这个领域相当陌生。非常感谢您的帮助。
c - 内存写入何时会成为全局可见的?
我正在用 C 编写一些低级同步代码。我遇到了一个问题:
假设有两个线程Thread A
并Thread B
在 x86_64 机器上运行。Thread A
在时间t1写入内存位置,之后不再对该位置进行写入。Thread B
在时间t2读取相同的内存位置。
我的问题是:对于t2 - t1 > delta的任何t1和t2是否存在delta。保证读取在t1写入的最新值。Thread B
Thread A
我已经阅读了英特尔和 AMD 的文件,他们没有提到是否存在这样的保证。我知道这个值可能取决于处理器型号甚至主板设计(对于多路机器)。我想在当前可用的任何健全的 x86_64 机器上,这种延迟必须有一些限制。
我知道如何使用锁或内存屏障等同步原语来保证这种行为。我只需要知道是否存在这样的保证延迟,以使内存访问变得全局可见。
非常感谢!!
mysql - MySQL Cluster 7.3 如何实现 99,999% 的可用性?CAP定理的对立面
根据《使用 MySQL Cluster 扩展 Web 数据库指南》,MySQL Cluster 7.3 在使用同步更新复制的同时可以实现 99,999% 的可用性。这将与CAP 定理相反,因为它指出完美的可用性(99,999% 可以看作是这样,不是吗?)和一致性在分布式系统中是无法实现的。
如果负责副本的数据节点不可访问,集群将如何对更新做出反应?对于同步更新复制,它必须阻塞,这会影响可用性。
该指南指出:
- 数据节点内的数据同步复制到节点组内的所有节点。如果一个数据节点发生故障,那么总会有至少一个其他数据节点存储相同的信息。
- 在数据节点发生故障的情况下,MySQL 服务器或应用程序节点可以使用节点组中的任何其他数据节点来执行事务。应用程序只需重试事务,其余数据节点将成功满足请求。
但是,如果一个节点组由两个节点和一个崩溃组成(这里的示例),这将如何工作?据我所知,没有节点可以将更新复制到使用同步更新复制时会导致更新失败的内容?!复制是否只是在不存在要写入副本的节点时暂停?