当前位置: 首页 > 知识库问答 >
问题:

纪事地图原子性语义学

方光华
2023-03-14

我想知道编年史地图中的原子语义学。如果我有一个跨2个节点(服务器)共享的历史映射,并且我试图在两个节点上同时将相同的密钥插入到这个映射中,那么事务语义学是什么?

第一次放会成功,第二次放会失败吗?

我很好奇编年史地图是否保证与ApacheZooKeeper相同的事务语义?

在我的用例中,我想依靠这样一个事实,如果node1将一个键K1放入映射中,node2将能够检查K1的存在,如果它不存在,它将明确地知道它是第一个添加K1的。

实际上,询问ChronicleMap上的放置是否是跨2个节点的分布式事务。

非常感谢克利福德

共有1个答案

韩彦君
2023-03-14

编年史地图使用最终一致性,最后一个获胜。当你观察微秒级的时间尺度时,节点处于一个分裂的大脑节点中,因为无法以这种速度保持它们的同步。这是通过设计实现的,因为Map设计为支持每台服务器每秒数百万次的更新。一般来说,在正常操作下,不难确保两台服务器不同时更新同一个密钥。例如,您可以使用Engine将所有更新传递给一台服务器,也可以对密钥进行分区以进行更新。虽然分布式事务听起来是个不错的主意,但您应该注意;-它们的速度要慢很多个数量级,-当你遇到像大脑分裂这样的失败时,很难从中恢复过来。-在不同的故障条件下测试应用程序是否正常工作是一件非常痛苦的事情。

我的观点是,最好设计一个不需要这种假设的系统,这样你就可以知道在没有大量测试的情况下,它在失败时的表现。

假设您在三个数据中心安装zookeeper,并确保没有任何数据中心拥有一半或更多的节点(两个数据中心还不够),从而确保一个数据中心的故障不会停止运行,但假设您的大脑因缓慢的互连而暂时分裂,这会影响任何更新,但会以难以复制或测试的方式暂时影响更新。有了chronicle map,数据中心可以在任何时间断开连接,其所有保证都得到履行,您无需进行额外的测试。事实上,除了一个节点外,您可能会丢失所有节点,并且仍然可以进行完全操作。

 类似资料:
  • 在MongoDB中,写操作的原子性是在document级别上的,即使修改的是文档中的内嵌部分,写锁的级别也是document上。 当一个写操作要修改多个文档,每个文档的修改是原子性的。整个的写操作并不是原子性的,它可能和其他写操作产生交织。然而你可以使用$isolated隔离操作符来限制写操作,让它不与其他写操作交织。 不隔离性能更高,但是会产生数据的不确定性,隔离写操作,事务性更好。MongoD

  • 基于 Swoole 提供的 Swoole\Atomic,直接在配置文件中设置,就可以在worker进程中使用,数据互通。 使用时无需加锁! 配置方式 在项目配置文件中加入以下节 'atomics' => [ // 定义名为name1的,初始值为0 'name1', // 定义名为name2的,初始值为10 'name2' => 10, ],

  • 我有以下情况 我有一个REST客户端,它充当其他3个REST客户端的门面。(我正在用Java编程,使用Spring Boot) 客户机的职责之一包括对用户执行CRUD操作 现在,所有其他3个公开自己REST API的系统都有某种用户管理功能。 例如,当我收到创建用户的请求时,我必须通过REST API在这3个系统上创建它们,并将它们保存在我的数据库中。 现在,在最好的情况下,我只是调用他们的API

  • 我正在评估Apache Kafka Streams的事件源,看看它在复杂场景中的可行性。与关系数据库一样,我也遇到过一些情况,原子性/事务性至关重要: 具有两项服务的购物应用程序: OrderService:有一个带有订单的Kafka流商店(OrdersStore) ProductService:有一家Kafka流商店(ProductStockStore),里面有产品及其库存 流量: > Orde

  • Qt Software 前身为 Trolltech(奇趣科技),Trolltech 始创于 1994 年 1996 年 Qt 上市 Qt 已成为数以万计的商业和开源应用程序的基础 Qt 的软件授权机制具有经受市场检验的双重授权(开源与商业)模式 Trolltech 于 2008 年 6 月被 Nokia 收购,加速了其跨平台开发战略 阅读材料:Qt 简史 Qt 工具包最初是在 1995 年 5 月

  • 当我尝试使用斯坦福NLP和CoreNLP分析文本时,性能非常差。处理CNN的文件。com大约需要30秒。 我拥有的代码基本上创建了具有以下配置的StanfordCoreNLP的单个实例: 注释器=标记化、ssplit、pos、引理、ner、解析、dcoref sutime。活页夹=0 当我禁用“ner, parse, dcoref”时,性能非常快。由于我需要获取语义图,我想知道是否有一种方法可以优