处理 Datomic 中存储的无序消息?

2024-01-16

背景

在分布式系统中,消息可能会以无序的方式到达。例如,如果消息 A 在时间 T1 发送,消息 B 在时间 T2 发送,则有可能在 A 之前接收到 B。例如,如果 A 是诸如“CustomerRegistered”的消息而 B 是“CustomerUnregistered”,则这一点很重要。

在其他数据库中,如果收到数据库中不存在的客户的 CustomerUnregistered,我通常会编写墓碑。然后,我可以在收到 CustomerRegistered 消息时检查此墓碑是否存在(并且可能只是根据用例忽略此消息)。我当然也可以使用 Datomic 做类似的事情,但我希望 Datomic 可以帮助我,这样我就不需要这样做了。

我正在考虑的一个潜在的解决方案是:

您是否可以撤回不存在的客户实体(CustomerUnregistered),然后在收到 CustomerRegistered 时,将客户实体写入历史记录中的某个时间before撤回? (我认为)如果:db/txInstant可以设置为消息中定义的时间戳。

Question

在 Datomic 中如何以一种惯用的方式处理这种情况?


作为一般原则,不要让您的应用程序代码操纵:db/txInstant. :db/txInstant代表您所在的时间learned事实,而不是事情发生的时间。

也许您应该考虑取消注册作为添加有关客户的 Datom(例如通过即时类型:customer/unregistered属性)而不是收回该客户的 Datom(这意味着:“忘记该客户的存在”)。

但是,如果收回客户的数据确实是您想要做的事情的方式,我会使用一个记录来阻止客户注册交易的发生(我将通过交易功能强制执行)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理 Datomic 中存储的无序消息? 的相关文章

  • 字符的序数/int/ascii 值

    在 clojure repl 中我可以这样做 gt int a 97 在闭包脚本中 我不断得到 gt int a 0 在我当前的 clojurescript 项目中 我定义了一个 var def ord a int a 当我检查发出的 ja
  • Clojure 和 scala 互操作

    我熟悉 scala 类 对象可以从 clojure 调用 因为 scala 编译为字节码 并且 clojure 对此很满意 然而 调用 clojure 函数和从 scala 导入命名空间是否一样轻松 我想将优秀的 lift 框架和 cloj
  • 如何从 Matlab 运行 Clojure

    如何从 matlab 运行 clojure 脚本 我尝试了以下操作 使用jdk 1 7运行matlab 然后调用java MATLAB JAVA usr lib jvm java 7 oracle jre matlab 在matlab中 设
  • 什么是谓词调度

    我最近看到很多关于 Clojure 中谓词分派的讨论 想知道这件事是否有什么意义 换句话说 什么是谓词分派以及它与泛型函数 OOP 多态性和模式有何不同 谢谢 谓词分派包含泛型函数 OOP 多态性 模式匹配等 一个好的概述是谓词调度 统一的
  • 音色 `set-config!` 已经改变了数量,因此不知道如何使用它来将 std err/out 输出到文件

    我正在尝试使用https github com ptaoussanis timbre https github com ptaoussanis timbre记录到文件而不是控制台 以下是我找到的一些有关如何执行此操作的文档 The defa
  • Clojure:避免埃拉托斯特尼筛中的堆栈溢出?

    这是我在 Clojure 中实现的埃拉托斯特尼筛法 基于 SICP 流课程 defn nats from n iterate inc n defn divide p q zero rem q p defn sieve stream lazy
  • Lisp / Clojure:编写函数生成宏是个好主意吗?

    这个问题 https stackoverflow com q 7852351 346587要求创建一个 Clojure 宏来生成多个函数 我们找到了一种方法来做到这一点 但仍被 这是一个好主意吗 的问题所困扰 我的第一反应是并不真地 有两个
  • clojure 中的反转哈希映射

    我在 clojure 中有哈希映射 key1 value1 key2 value2 key3 value1 我需要将其转换为哈希映射 value1 key1 key3 value2 key2 有 Clojure 方法可以做到这一点吗 clo
  • 宏、Clojure 与 Common Lisp

    我和我的一些朋友正在开发一个新平台 我们想用 lisp 构建它 主要吸引力是宏 我们都使用 Common Lisp 但我想探索 Clojure 的选择 当我提出这一点时 其中一位说宏观体系 较弱 我想知道这是否属实 以及在哪些领域 就您可以
  • 在 Light Table 中使用 Datomic 时出现“无读取器功能”错误

    当我在 lighttable 中评估这段代码时 ns app core require datomic api refer q as d reload all defn add person conn id d transact conn
  • 使用 ProGuard 混淆 clojure uberjar

    我想知道是否有人有使用 proguard 混淆他们的 leiningen 编译的 uberjar 的经验 我已经尽力在谷歌上寻找解决方案 但找不到真正的答案 我想知道这是否可能 我一直在尝试混淆默认的 lein 项目 这是 core clj
  • 这两个 clojure 函数之间有什么区别和问题?

    对于课程项目的一部分 我正在实现一个函数来从文件中读取一些数据并根据该文件创建图形结构 一整天我问了几个问题 结果就是这样 下面是一个可以正常工作的函数 它首先以惰性序列的形式读入文件 然后循环解析每一行并将其打印出来 defn print
  • 如何应用Clojure? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习 Clojure 我真的很喜欢它的一些功能 是时候考虑一 些真正的 宠物项目 了 我意识到我不知道如何真正做到这一点use克
  • 适用于具有不同数量数据字段的用户的功能

    这个问题是我练习的时候产生的教程中的观察者主题 http mishadoff com blog clojure design patterns episode 10 observer我试图将该功能应用于用户 但无法使用用户的数据字段 例如姓
  • Clojure:生成所有键盘可输入字符

    Context 我想生成可以通过以下方式生成的所有字符 打开记事本 按键盘上的单个键 按住 Shift 按键盘上的单个键 我目前拥有的 concat range int a int z range int A int Z range int
  • Clojure 中 with-local-vars 和 with-bounds 之间的区别

    Clojure 的文档with local vars http clojuredocs org clojure core clojure core with local vars and with bindings http clojure
  • Clojure Web 应用程序 - 我从哪里开始?

    最近我一直在研究 Clojure 我喜欢这门语言 我想看看我是否可以在其中制作一个小型网络应用程序 只是为了挑战自己 但是 我完全没有设置任何与 Java 相关的 Web 应用程序的经验 事实上 我对 Java 并没有太多的经验 我从哪说起
  • Emacs/Swank/Paredit for Clojure 的温和教程

    我要转向 Emacs 来工作Clojure http en wikipedia org wiki Clojure Lisp 为了能够执行以下操作 我需要在 Emacs 上设置哪些信息 自动匹配 生成相应的右括号 自动缩进 Lisp Cloj
  • 获取调用表单的名称空间

    我想要一个宏this ns这样它就会返回调用它的位置的名称空间 例如 如果我有这段代码 ns nstest main require nstest core as nstest defn ns str x gt x getName name
  • 枚举和 Clojure

    在Java C世界中 人们经常使用枚举 如果我使用的是使用枚举的 Java 库 我可以在它们和关键字之间进行转换 例如 使用 java lang Enum valueOf e aget Ljava lang Enum e getEnumCo

随机推荐

  • 使用 onBlur 验证输入类型=文件

    我可以使用 onBlur 来验证 type text 或 textarea 输入 但是我无法让同样的方法适用于 type file 这有效
  • 亚马逊 SimpleDB 与亚马逊 DynamoDB

    我有一些基本的了解亚马逊简单数据库 http aws amazon com simpledb 是 但根据亚马逊动态数据库 http aws amazon com dynamodb 描述似乎几乎相同 aNoSQL 键值存储 http en w
  • Hackage 包“双重转换”中未定义的符号

    我正在尝试建立double conversion来自 Hackage 的包 它构建正常 但 ghci 无法加载它 投诉内容是 Loading package double conversion 0 2 0 0 linking
  • Seaborn KDEPlot - 数据变化不够?

    我有一个包含 900 行的数据框 我正在尝试为某些列绘制 KDE 图 在某些列中 大多数值都是相同的最小值 当我包含太多最小值时 KDEPlot 会突然停止显示最小值 例如 以下包含 600 个值 其中 450 个是最小值 并且绘图看起来不
  • 如何在 python 中的 sklearn 中通过交叉验证执行 SMOTE

    我有一个高度不平衡的数据集 想要执行 SMOTE 来平衡数据集并执行交叉验证来测量准确性 然而 大多数现有教程仅使用单个training and testing迭代来执行 SMOTE 因此 我想知道使用交叉验证执行 SMOTE 的正确过程
  • 使用 team city 部署 ASP.NET 网站

    如何部署一个没有任何项目文件的网站项目 我们正在尝试使用 Team City 来自动化构建和部署 我能够成功构建该项目 但无法部署该网站 MsDeploy 支持通过以下方式部署网站contentPath提供者 msdeploy verb s
  • 从 Android 设备使用 PHP 连接到 MySQL 数据库

    我正在尝试使用 PHP 从 Android 设备连接到 MySQL 我正在关注这个教程 http blog sptechnolab com 2011 02 10 android android connecting to mysql usi
  • 较长的物体长度不是较短物体长度的倍数? [复制]

    这个问题在这里已经有答案了 我不明白为什么 R 会给我一个关于 较长对象长度不是较短对象长度的倍数 的警告 我有这个对象 它是通过对给出工作日中位数的 xts 系列进行聚合而生成的 u lt aggregate d list Ukedag
  • 在android中维护会话(应用程序在服务器端保持身份验证)

    我正在android中构建一个登录应用程序 其中我点击一个url 带有用户名和密码 直到该部分它工作正常 但之后每当我点击一个url 一旦用户通过身份验证 它什么都不返回 即错误消息 例如请先登录 然而 它在非常相似的 iPhone 应用程
  • 用于在原子编辑器中将选择内容转换为大写(或小写)的键盘快捷键

    在 Atom 编辑器中将当前选定的文本转换为大写 或小写 的键盘快捷键是什么 在 Windows 和 Linux 上 Ctrl K then Ctrl U for uppercase Ctrl K then Ctrl L for lower
  • GetSystemService DOWNLOAD_SERVICE 处于非活动状态

    在非活动类中的简单方法中 我使用代码 mgr DownloadManager mContext getSystemService DOWNLOAD SERVICE 在非活动类中 我的构造函数如下所示 public Download23 Co
  • Gradle - 如何从命令行检测 --debug 标志?

    我有一个正在执行命令的任务 我需要更改传递给命令的参数 具体取决于我是否这样做 gradlew debug myTask or gradlew myTask 我认为这就像这样做一样简单 project logger isEnabled Lo
  • UIDatePicker的minimumDate和maximumDate可以包含时间吗?

    需要一个具有特定最大和最小日期的 UIDatePicker和时间 目前 NSDatePicker minimumDate 和 maximumDate 似乎只考虑日期 处理这个问题的正确方法是什么 NSDates 包含日期和时间 来自文档 N
  • 为Android编译imagemagick

    我正在尝试编译这个项目https github com lilac Android ImageMagick https github com lilac Android ImageMagick 要生成 android magick so 我
  • 单色黑白位图

    我正在 Android 上工作 将从相机捕获的彩色位图转换为黑白单色图像 没有灰色 我有几种灰度转换方法 但我无法将图像转换为黑白格式 有没有什么方法可以将位图转换成这种格式 一种可靠的方法是平均阈值位图 该方法描述于这张纸 http ww
  • 迭代 HashSet 最快/最安全的方法是什么?

    我对 C 还很陌生 但通过论坛帖子注意到使用HashSet代替List在特定情况下 我当前的情况并不是将大量数据存储在单个List完全正确 但我不必经常检查它的成员 问题是我确实也需要迭代它 但它们存储或检索的顺序实际上并不重要 我已经读到
  • 以编程方式更改 Windows 中的打印机首选项

    我编写了一个为新用户安装多台打印机的脚本 我想更改其中一些设置 以便它们可以在页面的双面打印 我相信这涉及使用 printui 修改属性 但是它可能需要 VB 脚本或可能需要另一种 NET 语言 我会使用 VB C 或 IronPython
  • Axis2 会话管理

    我正在axis2中构建一个小型web服务 自下而上 我编写java类并让eclipse wtp生成服务 我想使用会话 以便用户可以使用用户名登录并通过 如果数据库中存在该用户名 而不是在会话上下文中使用 Web 服务 坦白说 我不知道从哪里
  • loader 和 AsyncTask 有什么区别? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想知道 Android loader 和 AsyncTask 之间的区别 这是 Loader 上的演示 package com android
  • 处理 Datomic 中存储的无序消息?

    背景 在分布式系统中 消息可能会以无序的方式到达 例如 如果消息 A 在时间 T1 发送 消息 B 在时间 T2 发送 则有可能在 A 之前接收到 B 例如 如果 A 是诸如 CustomerRegistered 的消息而 B 是 Cust