- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正试图围绕事件溯源中的事务处理。
我的事件存储中有一个聚合(事务范围)。
一个命令得到处理并产生 10 个事件。现在,这可以作为 1 笔交易处理还是 10 笔交易?对于事务,我的意思是对仅作为一个整体有效的状态的更改。即使我希望将它们作为一个整体处理,但如果它们被拆分成许多这样的事件,我是否设计错了?
我倾向于认为是命令定义了事务、意图,并且该命令产生的所有事件都应该作为一个整体来处理。这意味着它们应该只作为一个整体被持久化,作为一个整体加载,对读者作为一个整体(原子地)可见,并且也只能作为一个整体发送给我的事件总线上的监听器。
这是正确的想法吗?
这在例如 Kafka 和 Event Store 中是如何处理的?
那么产生许多事件的命令呢,这真的是很好的设计吗?我想要一些事情发生(命令)并且发生了一些事情(事件),没有发生很多事情?我希望有这种 1:1 的关系,但我在这里和那里读到命令应该能够产生许多事件,但为什么呢?
对不起,我希望有人能在这里得到我想问的问题。
最佳答案
A command gets processed and is producing 10 events. Now, can this be handled as 1 transaction or is this 10 transactions?
作为写入,这通常被建模为单个事务;要么整个commit被添加到历史记录中,或者什么都没有。
that they should only be persisted as a whole, loaded as a whole, visible to readers as a whole (atomically) and also only sent to listeners on my event bus as a whole.
read 方面可能有点棘手。毕竟,事件只是事件;作为消费者,我什至可能对它们都不感兴趣,尽快消费它们而不是等待一切都按顺序出现可能具有商业值(value)。
对于排序很重要的消费者,在这些情况下,您将读取流,而不是事件。但仍然存在这样的情况,即您可能在消费者中存在批处理/分页问题,这与将所有工作对齐提交边界的目标相冲突。
要记住的是,从读者的角度来看,没有不变量需要维护。事件流只是发生的一系列事情。
唯一真正关键的情况是编写者试图加载聚合状态;在这种情况下,您需要整个流,而提交边界基本上是无关紧要的。
How is this handled in for instance Kafka and Event Store?
在 Greg Young 的事件商店中,writing to a stream意味着将有序的事件集合复制到流中的指定位置。整个区 block 进来,或者根本不进来。
Reading from a stream包括分页支持——允许客户端请求一系列位于提交边界之间的事件。该文档不保证在这种情况下会发生什么。碰巧的是,返回的表示可以支持返回比可用事件更少的事件,因此事件可能总是在提交边界上返回。
我的阅读理解the source code是用于将流存储在磁盘上的持久性结构不会尝试保留提交边界 - 但我在这一点上肯定会弄错。
I'd like to have this 1:1-relationship but I read here and there that commands should be able to produce many events, but why?
有几个原因。
首先,聚合是人工的;它们是我们用来确保日志中数据完整性的一致性边界。但是一个给定的聚合可以组成许多实体(例如,在低争用级别下,将整个域模型放入一个“聚合”中并没有本质上的错误),并且将不同实体的更改视为彼此不同通常很有用. (替代方法类似于每次都编写 SomethingChanged 事件,并坚持让所有客户端都使用该事件以了解发生了什么)。
其次,重新建立域不变量通常是与命令中指定的操作分开的操作。 Bob 只是从他的账户中提取了比他可用的更多的现金;我们需要更新他的帐户分类帐并将问题上报给人类。哦,这是一个描述 Bob 当天早些时候存款的新命令,我们需要更新他的账户分类帐并告诉人们停止。
但从广义上讲,因为区分命令的多重后果更符合业务的自然语言。
关于transactions - 事件溯源中的事务处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44143589/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!