问题标签 [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 投票
4 回答
4869 浏览

cassandra - Cassandra 中的数据与 Quorum 配置不一致

当我们有 Quorum 进行读写时,我在使用 Hector 和 Cassandra 时遇到了一致性问题。

我使用 MultigetSubSliceQuery 从超级列限制大小 100 中查询行,然后读取它,然后将其删除。并开始另一个。

我发现应该由我之前的查询删除的行仍然显示在下一个查询中。

并且同样从一个普通的Column Family,我将一列的值从status='FALSE'更新为status='TRUE',下次查询时,status还是'FALSE'。

更多详情:

  1. 并非每次都发生(1/10,000)
  2. 两个查询之间的时间大约是 500 毫秒(但我们发现一对查询之间已经过去了 2 秒,仍然表明存在一致性问题)
  3. 我们使用 ntp 作为我们的集群时间同步解决方案。
  4. 我们有 6 个节点,复制因子为 3

我知道 Cassandra 应该是“最终一致的”,并且在 Cassandra 内部写入之前可能不会发生读取。但是两秒钟?!如果是这样,那么拥有 Quorum 或其他一致性级别配置是否毫无意义?

那么首先,Cassandra 的行为是否正确,如果不是,我们需要分析哪些数据来进一步投资?

0 投票
2 回答
7047 浏览

c++ - C++ 确保浮点大小为 4 个字节

我需要一种跨架构方式来确保浮点数为 4 个字节(就像在 32 位窗口上一样)。例如,在我创建的结构中,我使用__int32notint来确保一个 4 字节长的整数值。

我怎么能用浮点数做到这一点?我知道我可以将值替换为__int32类型;但是,在 64 位系统上转换为浮点数时,我不会有问题吗?

0 投票
3 回答
208 浏览

java - 在生成的类上应用构建器模式或类似模式

我有以下问题:

框架从 DB 表生成一个类,每个表列都是类变量(字段)。生成的类有 30 多个字段,只有一个没有参数的构造函数。

要创建该类的实例,我必须使用一些 setter 30 次,这是对不一致的邀请。

我不能直接使用带参数的构造函数或 Builder 模式,因为我无法编辑生成的类。解决这个问题的最佳方法是什么 - 包装类、线程安全方法、经典模式?

0 投票
2 回答
2272 浏览

couchbase - 沙发底座一致性

当 couchbase 服务器响应 set 命令时:

  • 当数据保存到单个(主)节点时
  • 当数据保存到所有节点时
0 投票
1 回答
387 浏览

scala - Scala 标准库对 toString() 和 hashCode() 的使用

可以安全地假设:

因为由于与 Java 的互操作性,scala.AnyRef用一对括号定义了 toString() 和 hashCode() (正如 Martin 在:https ://groups.google.com/forum/#!topic/scala-language/RlV9O1RDmis 中所建议的那样),

Scala 标准库中作为 scala.AnyRef 后代的每个类都使用一对括号定义 toString() 和 hashCode() ?

换句话说,我可以相信标准库的开发人员在使用 toString() 和 hashCode() 作为 AnyRef 的后代类方面是一致的吗?

编辑 - 将问题更改为仅询问 AnyRef 的后代类

0 投票
10 回答
78129 浏览

database - CAP 定理 - 可用性和分区容限

虽然我试图理解 CAP 中的“可用性”(A)和“分区容限”(P),但我发现很难理解各种文章的解释。

我感觉A和P可以一起走(我知道不是这样,这就是我无法理解的原因!)。

简单来说,A和P是什么以及它们之间的区别?

0 投票
1 回答
198 浏览

mongodb - 寻找支持 CAS 的 CA 键值存储

我正在寻找一种支持一致性、可用性和比较和设置的持久键值存储。

它将部署在三个节点上,并且必须在一个(任何)节点关闭时可操作。如果整个集群离线(例如由于电源问题)然后又重新在线,它不应该丢失任何数据。此外,我希望系统不会打扰系统管理员,除非两个节点已关闭。当然,希望尽可能快。最重要的特性是一致性:如果报告保存了某些内容,则它不会因失败而丢失。

我探索了 MongoDB 的文档,在一些罕见的情况下它需要手动干预,但这不是可选的。

我查看的另一个系统是伏地魔。我假设它通过以下设置满足我的要求:

但它没有提供关于复制和一致性的全面文档,所以我无法验证我的假设。

您是否有适合我要求的存储体验?你能给我推荐点什么吗?

PS我不打算存储大量信息,因此可以省略分片。

0 投票
2 回答
176 浏览

oop - OO:保持相关对象之间一致性的好方法

我有两个类,Server 和 Application,具有多对多的关系:一个服务器可以运行多个应用程序,一个应用程序可以跨多个服务器运行。第三个类 Host 表示单个服务器上的单个应用程序,包括对 Application 和 Server 对象的引用以及其他数据,例如服务器上的应用程序使用的磁盘空间量。Server 和 Application 对象都包含其所有主机的列表:因此,应用程序了解主机,主机了解应用程序,服务器了解主机,主机了解服务器。

我的项目的目的是制定将一堆应用程序迁移到新服务器上的时间表。最初,每个应用程序都有一个迁移开始日期和迁移结束日期。一些应用程序还具有虚拟化的开始和结束日期。如果迁移不能在应用程序的限制内执行(不管这些是什么),就会发生虚拟化。它发生在迁移之前并将应用程序从其约束中释放出来。Application 对象持有一个名为“Schedule”的对象,其中包括这 4 个日期以及一个表示是否要虚拟化的布尔标志,以及一个包含迁移所需工时的“月”列表(或虚拟化)每个特定月份的应用程序。

我们现在希望允许服务器在指定日期单独进行虚拟化。这些服务器上的所有应用程序(或部分应用程序,即主机)将在该日期进行虚拟化;它们将与应用程序的其余部分一起迁移。我们最初决定让服务器类拥有自己的 Schedule 对象。然后在服务器中设置虚拟化日期。但是,我们决定要保持服务器和应用程序计划的一致性 - 例如,服务器计划的迁移开始日期和结束日期应分别设置为在该服务器上运行的所有应用程序的最早开始日期和最晚结束日期服务器。这意味着每次更新应用程序日期时,我们都必须记住更新其所有服务器日期(通过主机对象)。或者,如果我们想更新应用程序'

然后我们考虑在每个 Host 对象中放置一个 Schedule 对象。这解决了一致性问题,但导致了相当多的冗余:因为属于应用程序的所有主机对象都必然具有相同的迁移日期(但可能是不同的虚拟化日期),当您为应用程序设置迁移日期时,您有为每个主机设置相同的日期。此外,在某些情况下,我们需要计算出服务器和应用程序的最早开始日期和最晚结束日期,如上所述。这将涉及:在每个应用程序和服务器对象中保存此数据(有效地为每个对象提供自己的调度,从而带回一致性问题),或者:通过循环在每次需要时动态计算此数据通过所有主持人的日程安排。应用程序每月所需的工时也是如此,它是在应用程序级别计算的,每个主机每月分成几小时,然后在我们需要在应用程序级别再次计算时重新计算。正如您所料,这丝毫没有效率。

这不是一个简单的问题,但我想知道是否有任何公认的策略来处理这种情况。提前抱歉我的帖子冗长;希望我已经把情况说得够清楚了。

0 投票
1 回答
598 浏览

nosql - 在 Couchbase 的 Observe 功能中,“persistTo”和“replicateTo”有什么区别?

Couchbase API中,有存储和删除操作,允许您指定一个操作必须在返回之前成功持久化到多少个节点。这通过两个方法参数表示:

我的问题是:persistTo 和 replicateTo 参数有什么区别。例如,传入 PersistTo.MASTER + ReplicateTo.THREE 似乎与传入 PersistTo.FOUR 完全相同。以这两种不同的风格调用这些观察到的 API 之间实际上是否存在任何行为差异?

0 投票
1 回答
190 浏览

python - ZODB 中具有可变属性的对象的一致索引

我有一个 ZODB 安装,我必须在其中组织几百万种不同类型的对象。我有一个通用容器类Table,它包含 BTrees 来按属性或这些属性的组合索引对象。数据一致性非常重要,因此我想强制执行,当我写入索引覆盖的任何属性时,索引会自动更新。所以一个简单的obj.a = x应该足以计算所有新的依赖索引条目,检查是否有任何冲突,最后写入索引和值。

一般来说,我很乐意为此使用库,所以我查看了repoze.catalogIndexedCatalog,但对此并不满意。IndexedCatalog 似乎已经死了很长一段时间,并且没有为对象的更改提供那种一致性。据我所知, repoze.catalog 似乎更常用和更活跃,但也没有提供这种一致性。如果我在这里错过了什么,我很想听听它,并且更喜欢重用而不是重新发明。

所以,除了试图为问题找到一个库之外,我如何看待它,我必须拦截对具有描述符的数据对象属性的写访问,并让Table类执行更改索引的魔法。为此,描述符实例必须知道Table它们必须与哪些实例通信。当前的实现是这样的:

生成这些DatabaseElement类时,尚未创建数据库和其中的对象。因此,正如在这个不错的答案中提到的,我可能必须创建一些单例查找机制来查找Table对象,而不是将它们Property作为实例化参数。有没有更优雅的方式?保留描述符本身?欢迎任何建议和最佳实践示例!