从入门到放弃 - 事件溯源


本文转载自【何以解耦】:codedecoupled.com/php-es-quit.html

在接触事件溯源之初,其截然不同的设计模式常会让初学者望而却步。这篇文章概括了几种导致初学者放弃继续学习事件溯源的误解。

查询速度太慢

既然应用的当前状态需要通过事件流来获取的话,事件溯源无法实现对查询速度要求高的搜索功能。

当我们需要实现类似搜索这种对速度要求比较高的功能时,事件溯源提供了相应的解决方案 Projector。Projector 通过监听事件,生成独立的视图保存应用的当前状态。我们可以将其想象成数据库中的物化视图,或者是一种缓存。

聚合性能问题

随着事件数量的线性增长,塑造聚合的时间也会线性增长至无限长。

聚合需读取事件流来重塑其当前状态,塑造的时间确实会随事件数量的增长而呈线性增长,为了解决这个问题,事件溯源提供了一种叫做 Snapshot 的解决方案。

Snapshot 的中文意思是快照,顾名思义,Snapshot 的原理是将聚合的最新状态持久化。这样的话,在重塑时聚合便不需要读取所有的事件,这将大大提高其性能。

陡峭的学习曲线

与 CRUD 这种存储当前状态的模式相比,事件溯源的学习曲线太陡峭了,不值一顾。

学习事件溯源,我们必须改变传统的 CRUD 思想,学会使用事件驱动的方式解决问题。这种新的编程方式可以解决很多使用 CRUD 比较棘手的问题。

当然,我们也需要辩证地看待事件溯源。切不可任何项目都使用事件溯源,一定要分析业务场景,选择最理想的解决方案。

总结

放弃很简单,但坚持下来,一定很酷。

本文转载自【何以解耦】: codedecoupled.com/php-es-quit.html ,如果你也对 TDD,DDD 以及简洁代码感兴趣,欢迎关注公众号【何以解耦】,一起探索软件开发之道。

本作品采用《CC 协议》,转载必须注明作者和本文链接
Know how, know why meanwhile.
xuding
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!