使用DDD,如何实现批处理?

2024-02-17

我的逻辑包括从一个系统中选择大量记录,执行多个转换(基于业务规则)并将它们插入到另一个系统中。

将这些记录中的每一个实例化为对象,对它们执行转换,然后将所有这些对象插入到另一个系统中,这似乎对性能(和内存)产生了很大的影响。

在 DDD 中实现此目的的最佳方法是跳过类/对象并直接通过 SQL(也许是存储过程)来完成?

有没有更好的方法使用DDD来实现这个目标?

注意:系统使用 SQL 数据库,目前不提供像 CouchDB 这样的对象存储。


许多基于 DDD 构建的分布式系统都使用事件驱动架构,在该架构中,当每个实体经历状态更改(这将导致系统对其进行转换)时,实体不会等待一批执行所有转换,而是会引发发布到某种消息总线的事件(例如 Java 的 Mule、.NET 的 MassTransit)。您的转换系统将订阅此事件,并且当每条消息到达您的系统时,它将对消息中标识的实体执行转换,然后将另一条消息发布到目标系统。

这种“涓流处理”可以全天连续运行,不会给系统带来需要在​​下班后运行作业的负载。如果您担心性能,这种架构可能会导致系统在 COB 后 5 分钟转换最后一条记录,其中批处理作业甚至可能要到凌晨 3 点才能运行(在所有其他批处理作业完成之后)完成的)。

例如,如果您确实不希望目标系统在午夜之前更新,只需将消息排队到午夜,然后将它们发布到目标系统的端点。

Greg Young 在博客上发表了大量关于这种架构的文章。在 InfoQ 上查看他的工作。

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

使用DDD,如何实现批处理? 的相关文章

  • 在Oracle中使用IW和MM

    我使用 IW 表示每周结果 使用 MM 表示每月结果 但我总是收到错误 ORA 00979 not a GROUP BY expression 00979 00000 not a GROUP BY expression 我的疑问是这些 We
  • 从 call_log 中获取最大并发通话数

    我需要帮助在 MySQL 5 0 77 中编写一个查询 根据下面所示的数据 办公室一天的通话量 返回并发电话呼叫的峰值数量 我只是想知道一天中任何特定时间同时打电话的人数最多是多少 首先 这是 MySQL 表 CREATE TABLE ca
  • SQL查询查找具有特定数量关联的行

    使用 Postgres 我有一个架构conversations and conversationUsers Each conversation有很多conversationUsers 我希望能够找到具有确切指定数量的对话conversati
  • meta_query,如何使用关系 OR 和 AND 进行搜索?

    已解决 请参阅下面的答案 我有一个名为的自定义帖子类型BOOKS 它有几个自定义字段 名称为 TITLE AUTHOR GENRE RATING 我该如何修复我的meta query下面的代码以便仅books在自定义字段中包含搜索词 tit
  • SQL:如何从一个表中获取另一个表中每一行的随机行数

    我有两个数据不相关的表 对于表 A 中的每一行 我想要例如表 B 中的 3 个随机行 使用光标这相当容易 但速度非常慢 那么我该如何用单个语句来表达这一点以避免 RBAR 呢 要获得 0 到 N 1 之间的随机数 可以使用 abs chec
  • SQL Server 查询中 UNION ALL 与 OR 条件

    我必须根据表上不存在的条件选择一些行 如果我使用如下的 union all 它会在不到 1 秒的时间内执行 SELECT 1 FROM dummyTable WHERE NOT EXISTS SELECT 1 FROM TABLE t WH
  • Ruby ActiveRecord 和 sql 元组支持

    ActiveRecord 是否支持 where 子句中的元组 假设底层数据库支持 结果 where 子句看起来像这样 where name address in John 123 Main St I tried Person where n
  • 是否可以从子查询中获取多个值?

    有没有办法让子查询在oracle db中返回多列 我知道这个特定的sql会导致错误 但它很好地总结了我想要的 select a x select b y b z from b where b v a v from a 我想要这样的结果 a
  • 针对约 225 万行的单表选择查询的优化技术?

    我有一个在 InnoDB 引擎上运行的 MySQL 表 名为squares大约有 2 250 000 行 表结构如下 squares square id int 7 unsigned NOT NULL ref coord lat doubl
  • 具有不同组合的产品和产品包的数据库模型

    您将如何设计数据库来实现此功能 考虑一个场景 我们想要创建一个产品关系 封装 假设我们创建一个产品表 prod id prod name prod fee 1 prepaid A 19 usd 2 prepaid B 29 usd 3 pr
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • MySQL 概念:会话与连接

    我对 MySQL 的概念有点困惑 会话与连接 当谈论连接到 MySQL 时 我们使用连接术语 连接池等 然而在 MySQL 在线文档中 http dev mysql com doc refman 4 1 en server system v
  • 总和和不同不会改变结果?

    我是一个新手 试图在这里解决这个问题 到目前为止还没有运气 非常感谢任何帮助 Select Distinct AB agency no ab branch no AS AGENCY BRANCH count AB agency no ab
  • 多边形内的 SQL 地理点在 STIntersect 上不返回 true(但使用 Geometry 返回 true)

    我不想仅仅为了在 STIntersect 中返回 true 而将地理数据转换为几何图形 下面是 SQL 中的代码 DECLARE point GEOGRAPHY GEOGRAPHY Point 1 1 4326 DECLARE polygo
  • SQL查询json字典数据

    我的表中的 CLOB 字段包含 JSON 如下所示 a value1 b value2 c value3 我正在尝试编写一个 SQL 查询来返回一个包含键和值字段的表 如下所示 key value a value1 b value2 c v
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • hive - 在值范围之间将一行拆分为多行

    我在下面有一张表 想按从开始列到结束列的范围拆分行 即 id 和 value 应该对开始和结束之间的每个值重复 包括两者 id value start end 1 5 1 4 2 8 5 9 所需输出 id value current
  • 研究MySQL、SQLite源码了解RDBMS实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道实现数据库是一个很大的话题 但我想通过研究数据库系统的源代码来基本了解数据库系统的工作原理 例如
  • CONTAINS 不适用于 Oracle Text

    我在执行此查询时遇到问题 SELECT FROM gob attachment WHERE CONTAINS gob a document java gt 0 它给了我 ORA 29902 error in executing ODCIIn
  • 替换字符串中的多个字符,而不使用任何嵌套替换函数

    我的表中存储了一个方程 我一次获取一个方程 并希望将所有运算符替换为任何其他字符 输入字符串 N 100 6858 6858 N 100 0 2 N 35 运算符或模式 替换字符 输出字符串 N 100 6858 6858 N 100 0

随机推荐

  • 完成 UI Activity 分配 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个 Android 编程 UI 实验室 我正在尝试完成它 我想我很近 但又很远 我正在处理四项活动 但只需要完成其中三项 这是我所拥有
  • titan 1.0.0 中的 gremlin 并未在 Windows 上开箱即用

    我正在关注http s3 thinkaurelius com docs titan 1 0 0 getting started html http s3 thinkaurelius com docs titan 1 0 0 getting
  • SNS 的自我限制消息长时间未发送会怎样?

    假设我有一个 SNS 我使用该属性进行自我限制maxReceivesPerSecond 假设我们的生产率非常高 但由于节流 消耗非常慢 这可能会导致某些消息在 SNS 中停留很长时间 我看到了这个所以答案 https stackoverfl
  • 如何针对特定来电提供定制振动

    该程序的功能如下 用户有一个电话号码列表 只有当没有其他系统范围的应用程序提供振动 例如在静音模式下 时 手机才会在来电时振动 我知道这在某种程度上违反了规则 因为应用程序应该尊重用户的设置 但应用程序仅限于某些有此需求的用户 我尝试了两种
  • 返回此意外输出的 CUDA 代码发生了什么情况?

    终于让动态并行性启动并运行后 我现在正在尝试用它来实现我的模型 我花了一段时间才发现一些奇怪的输出是由于需要使用 cudaDeviceSynchronize 让父内核等待子内核完成而导致的 我定义为 arrAdd 的设备函数似乎有问题 下面
  • 如何更改删除+添加以在git历史记录中移动

    我有一个 git 存储库 它是一些旧的 svn 存储库的混合体 当我混合所有内容时 我没有意识到要执行 git mv 而不是仅仅移动文件 所以现在大多数文件的 svn 历史记录都丢失了 有办法解决这个问题吗 旧的结构是这样的 svn1 ap
  • 如何从 Linux 访问 Team Foundation Server (TFS)

    如果这个问题不是特定于 VCS 的 因此程序员比系统管理员更了解这种问题 那么我会问有关服务器故障或超级用户的问题 也就是说 如何从 Linux 访问 TFS 是否有一个可以在 Linux 上运行的客户端应用程序 或者一个可以在 Windo
  • SQL Server 的数据生成器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 过滤 Pandas 数据框聚合

    我有一个 pandas 数据框 我对其进行分组 然后执行聚合计算以获得平均值 grouped df groupby year month company means grouped agg size mean 这给了我一个数据框 但我似乎无
  • Angular/Typescript - 该表达式不可构造。类型“MoveDataClass”没有构造签名

    我正在使用 3 种方法创建一个类来创建该类的新实例 但是当我尝试这样做时 会出现以下错误 Angular Typescript 该表达式不可构造 类型 MoveDataClass 没有构造签名 我做错了什么 班上 export class
  • Emacs 重新排列分割窗格

    如果我在 终端 Emacs 中工作并且使用水平分割在屏幕上有 2 个缓冲区
  • 属性表模式与将所有属性存储在 json 列中[重复]

    这个问题在这里已经有答案了 我想要一些关于模型可以在通过关系访问的属性表中拥有的所有属性 使用 Laravel 关系 与将所有属性 设置存储在同一个表中但在 json 列中的反馈 目前 我的应用程序有一个名为 设置 的属性表 它本质上也是多
  • Django“xxxxxx 对象”在管理操作侧边栏中显示自定义

    我想更改管理员最近更改侧边栏显示添加的 对象 名称的默认行为 参考下图 我想更改它们在管理中的命名方式 理想情况下 我希望能够将其从 MyModelName 对象 更改为 策略 对象示例中的 策略 策略的 策略名称 字段的值 我在想 uni
  • htaccess url 重写,url 中包含多个变量

    我想在我的 htaccess 文件上制定一些 url 重写规则 以便此链接 http myseite com index php var1 value1 var2 value2会变成 http myseite com var1 value2
  • 在 Webpack Visual Studio 2017 .NET Core 2.2 捆绑的 Chrome 中调试 Typescript

    有几个问题 但大多数答案似乎是 如果你有 VS 2017 现在应该是默认的 我的调试器无法正常工作 因此我想提供我的具体案例以获得一些帮助 我也是 Typescript 和 Webpack 的新手 可以提供一些背景信息 项目层次结构 www
  • 如何使用 SASS 扩展/修改(自定义)Bootstrap

    我想创建一个基于 Bootstrap 的网站主题 我想扩展 Bootstrap 的默认组件并更改其中的一些组件 为此 我需要access到 Bootstrap 定义的 SASS 变量 这样我就可以覆盖它们 我想过从 GitHub 克隆 Bo
  • 正则表达式查找具有起始词和结束词的最短字符串

    我想找到一种方法来编写正则表达式来搜索以指定的开始子字符串开头并以另一个指定的结束字符串结尾但总长度最小的字符串的出现次数 例如 如果我的起始字符串是bar我的结束字符串是foo当搜索字符串时barbazbarbazfoobazfoo那么我
  • 解析没有 .proto 文件的 Protocol-Buffers

    作为安全项目的一部分 我正在对 Android 应用程序进行逆向工程 我的第一步是发现应用程序和服务器之间交换的协议 我发现正在使用的协议是协议缓冲区 鉴于 protobuf 的性质 需要原始 proto 文件才能反序列化 protobuf
  • 如何使用 Vue JS 设置嵌套数组的增量计数器

    我使用 Vue JS 的数组深度为两层 我需要一个从 0 开始的索引 并为顶部数组中的每个项目递增 这是我的 HTML div div
  • 使用DDD,如何实现批处理?

    我的逻辑包括从一个系统中选择大量记录 执行多个转换 基于业务规则 并将它们插入到另一个系统中 将这些记录中的每一个实例化为对象 对它们执行转换 然后将所有这些对象插入到另一个系统中 这似乎对性能 和内存 产生了很大的影响 在 DDD 中实现