标签: consistency

结合Neo4J和MongoDB:一致性

这些天我正在做很多实验,我想做的其中一件事就是结合两个流行的NoSQL数据库,即Neo4j和MongoDB.仅仅因为我觉得它们完美地相互补充.Neo4j中的第一类公民,即关系,是MongoDB中缺少的,而MongoDb允许我不在我的节点属性中放入大量数据.

所以我试图在Java应用程序中使用Neo4j Java REST绑定和MongoDB Java驱动程序将两者结合起来.我的所有域实体都有一个唯一的标识符,我存储在两个数据库中.其他数据存储在MongoDB中,实体之间的关系存储在Neo4J中.例如,两个数据库都包含userid,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部分是一成不变的.文档存储数据库不像Java库那么长.

transactions consistency mongodb neo4j

6
推荐指数
1
解决办法
2858
查看次数

MySQL Cluster 7.3如何实现99,999%的可用性?与CAP定理的对立

根据"使用MySQL群集扩展Web数据库指南",MySQL Cluster 7.3可以在使用同步更新复制时获得99,999%的可用性.这将是CAP定理的一个对立面,因为它表明完美的可用性(99,999%可以看作是这样,没有?)并且在分布式系统中一致性是不可行的.

如果无法访问负责副本的datanode,群集将如何响应更新?对于同步更新复制,它必须阻止,这将影响可用性.

指南指出:

  • 数据节点内的数据同步复制到节点组内的所有节点.如果数据节点发生故障,则始终存在至少一个存储相同信息的其他数据节点.
  • 如果数据节点发生故障,MySQL服务器或应用程序节点可以使用节点组中的任何其他数据节点来执行事务.应用程序只是重试事务,其余数据节点将成功满足请求.

但是,如果节点组包含两个节点和一个崩溃(例如此处),那么它如何工作呢?根据我的理解,没有Node可以将更新复制到使用同步更新复制时更新失败的内容?!复制是否只是在没有节点写入副本的时候暂停?

mysql high-availability consistency distributed-database

6
推荐指数
1
解决办法
715
查看次数

执行的示例,它是顺序一致但不是静止一致的

在并发程序的正确性的背景下,顺序一致性是比静态一致性更强的条件,根据Maurice Herlihy和Nir Shavit的多处理器编程技术(第3章)作者在3.4.1中也提到有顺序一致的执行不是静止一致.我不明白怎么做.有人可以投光还是提供样品执行?

concurrency consistency

6
推荐指数
1
解决办法
3286
查看次数

在测试期间控制最终的AppEngine数据库一致性

我有一个用Go编写的AppEngine应用程序,我正在努力改进我的测试.

我需要运行的部分测试是对同一对象的一系列创建,更新,删除查询.但是,鉴于数据存储最终是一致的(这些不是子对象),我目前仍然使用a time.Sleep(time.Second * 5)来为SDK中的模拟数据存储提供足够的时间来传播一致性.

这导致测试需要很长时间才能运行.如何在不重写代码以使用祖先查询的情况下强制执行更强大的一致性测试?

google-app-engine consistency go google-cloud-datastore

6
推荐指数
2
解决办法
411
查看次数

可序列化是否与顺序一致性相同?

我发现人们在回答线性化和可分割性之间存在差异,但我发现人们都没有发现可串行化与顺序一致性相同或者与之不同.

此外,我在不同的文章,书籍和网页上对上述术语的不同定义进行了抨击,我对此感到困惑.有人可以解释可串行性和顺序一致性之间的区别是否存在.

如果可能的话,我将赞赏上述术语的正式定义(无论是简单的英语还是程序或执行历史).

consistency serializable

6
推荐指数
1
解决办法
712
查看次数

Google Cloud Storage 不一致,在可恢复上传完成后 500 毫秒之前返回 404

我正在使用云存储制作一个文件上传器,该文件上传器的行为不一致,这似乎与文档相反。

当您将对象上传到 Cloud Storage 并收到成功响应时,该对象可立即从 Google 提供服务的任何位置进行下载和元数据操作。无论您创建新对象还是替换现有对象,都是如此。由于上传是高度一致的,因此您永远不会收到 404 Not Found 响应或写入后读取或元数据更新后读取操作的陈旧数据。https://cloud.google.com/storage/docs/consistency#strongly_consistency_operations

...但是如果我上传后立即阅读,我会收到 404。

流程如下:

  1. 我的后端 NodeJS API 启动可恢复上传,创建存储桶的会话 URI
  2. 然后用户通过 PUT 从浏览器将文件直接上传到 GCS 会话 URI
  3. 前端发布了对我的 API 的更新,表示上传已完成。
  4. 然后我的 API 尝试下载相同的文件作为流并摄取它

我一切正常,但后来发现当上传新文件时(即存储桶中尚不存在),上传完成(步骤 2)和读取成功(步骤 4)之间需要 500 毫秒的延迟。如果我立即执行,我会得到 404。

文档指出,通常上传可以立即使用,除非有一些缓存。

重要提示:公开可读的缓存对象可能不会表现出强一致性。有关详细信息,请参阅缓存控制和一致性

我正在使用XMLHttpRequest将文件上传到 GCS 并使用该load事件来检测已完成的上传。根据我的阅读,这应该意味着已收到 200 响应,因此该文件已就位。尽管调试加载事件表明它只是另一个 100% 的“进度”事件。

我尝试过的

解决方法是setTimeout(done, 500)在第 3 步调用我的 API 之前,将 a 添加到加载事件处理程序中的最终回调中。

我已经对此进行了数十次测试,它是可靠的,可重复的,其中 0 - 400 毫秒失败,大约 500 毫秒以上“修复”它总是。

我尝试按照建议将缓存控制标头添加到原始 POST 中,这将上传会话设置为没有缓存 - …

javascript file-upload consistency node.js google-cloud-storage

6
推荐指数
1
解决办法
1663
查看次数

选择 NoSQL 数据库以在 CQRS 设计的应用程序中存储事件

我正在寻找关于如何选择 NoSQL 数据库引擎以在 CQRS 设计的应用程序中存储所有事件的良好、最新和“决策帮助”解释。

我目前是 NoSQL(但正在学习)所有事物的新手:请清楚并毫不犹豫地以(几乎太多)精确的方式解释您的观点。这篇文章可能值得像我这样的新人。

该数据库将:

  • 能够为前视图要求的每次更新插入 2 到 10 行(在我的情况下,更新很频繁)。想想每分钟数千次更新,它会如何扩展?

  • 非常需要一致性和故障安全性,因为事件是应用程序的真实来源。

  • 除了用户 ID/GUID 之外,不需要实体之间的任何链接(就像 RDBMS 那样)(我不知道它是关键还是需要)

  • 接收包含 3 到 10 个“列”(序列 ID、事件名称、日期时间、JSON/二进制编码的参数包、一些上下文信息..)的事件。如果没有在面向列类型的数据库中定位您的观点,如果它符合所有其他要求,则它可能是面向文档的

  • 用作队列或发送到外部 AMQP 系统(如 RabbitMQ 或 ZeroMQ)或从外部 AMQP 系统读取(还没有处理那部分,如果您还可以论证/解释..),因为视图投影将建立在事件上

  • 需要按序列 IDSELECT * FROM events WHERE sequence_id > last_sequence_id进行某种过滤,例如订阅者(或队列系统)才能从给定点进行同步

我听说过用于 CQRS 事件存储的 HBase,但也许 MongoDB 适合?或者甚至是 Elasticsearch(不会赌那个..)?为了一致性和可用性,我也对 RDBMS 持开放态度.. 但是分区容错部分呢..?

真的我迷路了,我需要争论来做出相关的选择。

domain-driven-design consistency nosql cqrs

5
推荐指数
1
解决办法
5636
查看次数

Couchbase 中 REQUEST_PLUS 和 STATMENT_PLUS ScanConsistency 之间到底有什么区别?

我无法理解请求和声明之间的区别以及一致性与它们之间的关系。

consistency couchbase

5
推荐指数
1
解决办法
1311
查看次数

dynamodb 更新表达式是否强一致?

假设给定的表已经包含以下键值对:

{ "id": "one", "num": 5000 }

如果我编写一个更新表达式(例如“ADD num :val”)来根据需要添加值,我是否可以期望在并行请求的情况下保持一致?

consistency amazon-dynamodb

5
推荐指数
1
解决办法
686
查看次数

我可以为 cosmosdb 使用客户端构建的会话令牌吗?

我已经对在 cosmosdb 的 dotnet v3 sdk 中使用会话令牌进行了一些研究,到目前为止,我发现这两个链接给了我一些关于如何使用它的提示:利用会话令牌如何转换会话-令牌

在我们的场景中,如果更新属于同一个,我们希望具有强一致性(但我们不想对所有数据都使用强一致性)userId,这样当一个实例更新该用户下的数据时,其他人都会立即看到结果。我们还想使用 cosmosdb 作为另一个场景的锁。

但是,上面的链接仅显示如何重用创建文档时返回的令牌。我想知道我是否可以构建自己的会话令牌并使用它来实现强一致性。

例如,如果我想更新特定下的数据,userId我将使用{userId}:-1#1会话令牌。这是使用会话令牌的有效方法吗?我也不确定字段 pkrangeid、Version、GlobalLSN 的含义以及它们在 cosmosdb 处理一致性时扮演什么角色。

提前致谢!

consistency azure azure-cosmosdb azure-cosmosdb-sqlapi

5
推荐指数
1
解决办法
1665
查看次数