我们已经讨论了数据工程师对建模的看法。 #匠真堂

这是什么?

这篇文章是FOLIO Advent calendar 2020中的第12天的文章。
第11天是关于paulxll重新创建数据仓库的故事。
第13天是Yuki Ishikawa的文章。

由于前几天收到了@j5ik2o的邀请,所以我和@MinoDriven一起聊了很多事情。

我打算在这里补充介绍一下上次没有详细说明或者遗漏的内容。

说过的事情

我主要是谈论以下两个事项。

    • データ基盤から見たときのアプリケーション側の技術的負債の見え方

 

    データ基盤から考えるドメインオブジェクトとモデリングについて

关于详细内容就先略过了,主要是讲述与以下关键词相关的话题,以及忽视数据管理的后果有多么严重。

关键字

不可变的数据模型 de

我在介绍kawasima先生的以下两张幻灯片时,谈到了如果只是简单地进行CRUD实现,在进行数据分析时可能会遇到的问题。

    • イミュータブルデータモデル(入門編)

 

    イミュータブルデータモデル(世代編)

有关详细信息,请参阅Kawasima先生在他的Scrapbox上关于不可变数据模型的描述。在考虑领域对象后,我认为思考如何记录领域事件是一个好主意。

由于@t_wada先生在#textafm活动结束后对不可变数据模型进行了简明易懂的讲解,我认为参考这一点也是个不错的选择。

#textafm 新一集已經發佈了。我覺得這次的內容相當有趣,尤其是在和田先生的幫助下,我們完成了一些特別的”服務對象和不可變數據模型之間有什麼關聯”的討論。我希望對於對這個問題感到好奇的人能夠一定要聽一下。

双时态数据模型

由于我们公司经常使用双时态(bi-temporal)数据模型来记录历史,因此工程师需要有理解能力。

我认为您可以参考下面的文章和幻灯片。

    • BiTemporal Data Modelに入門中

 

    データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3

星规模

在建立数据基础设施时考虑数据存储的原则,我正在采用这个方法。我认为在Microsoft有一篇易于理解的文章,可以作为参考。

    スター スキーマと Power BI での重要性を理解する

在将领域事件和领域对象转换为事实表时,需要什么?维度表中是否可以提供用于分析等的必要数据?是否可以通过领域对象进行转换?因此,对领域模型和数据模型的知识都是必要的,模型的经验在这种情况下非常重要。

射击和流动

我之前的经理教会我,在进行数据分析时需要以下两个数据。

    • ある時点での全体を俯瞰出来るデータ。いわゆるスナップショット。

 

    任意の対象の履歴データ。時系列に並べられていて状態遷移等がいつ発生したのかが分かる。

通过记录域事件的追加,可以将事件发生的时间、种类以及后续的过渡情况保存为数据。
另外,通过记录某一时点域对象的最新状态,可以将其保存为快照。

通过基于事件溯源的思想,将数据保留下来,可以更容易地创建用于数据分析所需的数据。

“30分钟了解数据管理的书籍”

在阅读《数据管理知识体系指南第二版》之前,这本书可以帮助您快速了解基本知识。它的内容基于作者的经验,非常实用,让您可以很容易地想象到与自己相关的情境。

这本书不仅涉及数据建模,还包含了开发应用程序时需要保留什么样的数据等对应用程序开发者有用的内容。

话不够

个人资料的分离

在进行数据分析时,需要确保无法识别个人身份,但由于应用程序的数据中可能包含一些个人信息,因此需要进行预处理,包括数据脱敏和转换(例如将年龄转换为年龄段等)。

在应用程序的记录过程中,需要避免包含敏感属性等信息,或者将与个人相关的数据作为单独的服务进行管理,以确保在应用程序内无法识别个人,这些措施需要提前考虑和实施。

通过这样做,可以明确个人相关属性的责任所在,并更容易地调整与分析时的数据细分颗粒度。

数据模型和领域模型

我认为理想情况下,系统应该是基于领域模型(Domain Model)而不是数据模型(Data Model)的,但在现实中很难实现,所以需要通过某种方式进行转换。
我不认为其中哪个更好或更优势,而是认为两者都是必需的,并且在设计时需要理解它们的差异并加以利用。

就个人来说,我更倾向于从领域模型出发进行考虑,所以在实际需要持久化之前我往往不会决定数据结构等细节。虽然大部分情况下会使用关系型数据库作为持久化方案,但现在越来越多地开始使用NoSQL或者像Kafka这样的队列进行存储。

在设计和实施常规的批处理时,我常常会考虑是否真的需要将数据转换为领域模型。在理解领域知识的基础上,思考并实现到底需要值对象还是实体对象,我觉得这样做很有趣。

通过从使用应用程序生成的数据的角度来看待,我认为我理解了域模型的重要性以及未反映出这一点的数据在分析中的作用如何不便。我也知道了使其可用需要花费多少成本。

最后

感谢@j5ik2o先生、@MinoDriven先生、以及@yoshiyoshifujii先生、@crossroad0201先生与所有参与匠真堂的工作人员的辛勤付出与支持。非常感谢您们!