数据管理指南

世面上有很多种软件,我主要从事的是企业应用。在这个领域,我们需要解决的一个持久性问题是数据管理,因为这类应用都是关于使用对大量数据的快速访问来加速工作流程,并向相关人员提供信息。数据管理包括许多方面:将数据存储在数据库或其他数据存储机制中,在应用程序之间移动数据,以及对数据进行建模以便我们能够理解其含义。

martinfowler.com 上有关数据管理资料的指南。


数据演进

在过去的几十年里,数据对拥有它的企业来说具有巨大的价值,这一点已经越来越明显。但数据也是操作它的软件的一个复杂因素。我们需要定期更改软件,以便为用户创造更多价值,但正是这些推动价值的数据也使得更改变得更加困难。

在敏捷软件开发的早期,我们被告知不能对数据库系统使用演进式设计技术,因为数据库模式难以更改,因此需要仔细的预先设计。幸运的是,我的同事 Pramod Sadalge 设计了一种通过频繁的小型数据库迁移来演进数据库设计的方法。这使得团队可以像重构代码一样演进他们的数据,即使这个数据库正在生产环境中运行。

演进式数据库设计

在过去十年中,我们开发并完善了许多技术,允许数据库设计随着应用程序的开发而演进。这对敏捷方法论来说是一项非常重要的能力。这些技术依赖于将持续集成和自动化重构应用于数据库开发,以及数据库管理员和应用程序开发人员之间的密切协作。这些技术适用于预生产和已发布的系统,以及全新项目和遗留系统。

作者:Pramod Sadalage 和 Martin Fowler

2016 年 5 月

阅读更多…

文章

敏捷 重构 应用架构 数据库 演进式设计

重构数据库

许多重要的软件系统依赖于存储在关系数据库中的持久性数据。为了改进这些软件并添加新功能,有必要更改这些数据库的结构:更改数据模式、其访问代码以及迁移数据库中的任何数据。幸运的是,重构的基本理念仍然适用:进行非常小的、保持行为的更改,并将它们组合在一起以进行大的更改。本书详细介绍了这些数据库重构,并举例说明了如何进行重构。

作者:Scott J Ambler 和 Pramod J. Sadalage

2006

阅读更多…

书籍

我的同事Pramod Sadalage二十年来一直是我在数据问题上的权威来源。他开发了演进式数据库技术,这是我们应用程序开发方法的核心部分,并与人合著了一本关于 NoSQL 数据库的书籍。


数据范围界定

在我职业生涯的初期,数据管理的主导主题是数据的单一、统一视图——将企业运营的各个方面与单一数据模型(通常是单一数据库)集成在一起。虽然这种观点仍然很普遍,但我已经转向了另一个方向,我认为我们必须接受企业中不同部分需要不同数据模型的现实:它们看待企业的角度不同,甚至对共同元素的看法也常常不同。

限界上下文

限界上下文是领域驱动设计中的一个核心模式。它是 DDD 战略设计部分的重点,该部分完全是关于处理大型模型和团队的。DDD 通过将大型模型划分为不同的限界上下文并明确它们之间的相互关系来处理大型模型。

作者:Martin Fowler

2014 年 1 月 15 日

阅读更多…

博客文章

团队组织 需求分析 应用集成 领域驱动设计

通用语言

通用语言是 Eric Evans 在领域驱动设计中使用的术语,用于在开发人员和用户之间建立一种通用、严谨的语言。这种语言应该基于软件中使用的领域模型——因此需要它严谨,因为软件不能很好地处理歧义。

作者:Martin Fowler

2006 年 10 月 31 日

阅读更多…

博客文章

领域驱动设计

应用数据库

我使用术语“应用数据库”来指代由单个应用程序控制和访问的数据库(与集成数据库相对)。由于只有一个应用程序访问数据库,因此可以专门定义数据库,以便轻松满足该应用程序的需求。这将导致更具体的模式,该模式通常更容易理解,并且通常比集成数据库的模式简单。

作者:Martin Fowler

2004 年 8 月 3 日

阅读更多…

博客文章

应用集成 数据库

如何从单体数据湖迁移到分布式数据网格

许多企业正在投资于他们的下一代数据湖,希望大规模地实现数据民主化,以提供业务洞察力,并最终做出自动化的智能决策。基于数据湖架构的数据平台具有常见的故障模式,这些模式会导致大规模的承诺无法兑现。为了解决这些故障模式,我们需要从以湖泊或其前身数据仓库为中心的集中式范式转变。我们需要转向一种借鉴现代分布式架构的范式:将领域视为第一要务,应用平台思维来创建自助服务数据基础设施,并将数据视为产品。

作者:Zhamak Dehghani

2019 年 5 月 20 日

阅读更多…

文章

企业架构 数据分析 领域驱动设计

以业务能力为中心

以业务能力为中心的团队是指其工作长期与某个业务领域保持一致的团队。只要上述业务能力与业务相关,该团队就会一直存在。这与项目团队形成对比,项目团队只持续到交付项目范围所需的时间。

作者:Sriram Narayan

2016 年 6 月 8 日

阅读更多…

博客文章

团队组织


NoSQL 数据库

在过去几十年的很长一段时间里,每当有人提到“数据库”时,人们都会立即想到关系数据库,通常是由三大数据库供应商销售的数据库。但在 2010 年代初期,我们看到人们对替代数据库技术(自称为“NoSQL”)的兴趣高涨。这些数据库种类繁多,包括 Mongo、Neo4j、Cassandra 和 Riak。我从未将这些数据库视为取代关系数据库成为主要的数据存储方法,但我确实认为它们在任何数据架构中都发挥着重要作用。

NoSQL 精粹

由于 NoSQL 数据库是新兴的并且引起了人们的兴趣,Pramod Sadalage 和我觉得缺乏对这项技术的良好介绍使得从业者很难就是否以及如何使用它们做出明智的决定。因此,我们写了一篇简短的(152 页)概述,涵盖了数据模型、分布式数据的问题、一致性思考、模式迁移以及不同风格的 NoSQL 数据库的几个例子。

作者:Pramod J. Sadalage 和 Martin Fowler

2012

阅读更多…

书籍

演讲:NoSQL 简介

2012 年,goto 大会邀请我以一场关于 NoSQL 数据库的介绍性演讲来开始他们的 NoSQL 专题讨论。我介绍了构成推特聚会标签背后定义的共同特征,讨论了常见的 NoSQL 数据模型,以及分布式数据存储系统中围绕一致性的问题。虽然它涵盖的内容与我们的书相似,但没有深入到相同的程度,但如果你喜欢简短的视频概述,这是一个合理的总结。(这是我最受欢迎的演讲,goto YouTube 视频的观看次数超过 75 万次。)

2013

更多…

视频

63 分钟

NoSQL 定义

当我们开始撰写NoSQL 精粹时,我们遇到了一个棘手的难题——我们到底在写什么?NoSQL 数据库究竟是什么?这个概念没有明确的定义,没有商标,没有标准组织,甚至没有宣言。

作者:Martin Fowler

2012 年 1 月 9 日

阅读更多…

博客文章

数据库 NoSQL

无模式数据结构

近年来,关于无模式数据的优势的讨论越来越多。无模式是人们对NoSQL 数据库感兴趣的主要原因之一。但是,无模式涉及许多微妙之处,无论是在数据库方面还是在内存数据结构方面都是如此。这些微妙之处存在于无模式的含义以及使用无模式方法的优缺点中。

作者:Martin Fowler

2013 年 1 月 7 日

阅读更多…

信息图

应用集成 数据库 NoSQL 演进式设计 信息图

NoSQL 精粹要点

当我们设计NoSQL 精粹这本书时,我们在大多数章节的结尾都总结了一些要点,作为读者重读本书时的复习资料。我们在网站上也包含了这些要点,作为读者提醒自己这些要点的另一种方式。

作者:Martin Fowler

2012 年 9 月 12 日

阅读更多…

NoSQL

面向聚合的数据库

当我们撰写NoSQL 精粹时,首先想到的主题之一是 NoSQL 数据库使用与关系模型不同的数据模型。我查阅的大多数资料都提到了至少四类数据模型:键值、文档、列族和图。仔细观察这份清单,你会发现前三者之间有很大的相似之处——它们都有一个基本的存储单元,它是一个由密切相关的数据组成的丰富结构:对于键值存储,它是值;对于文档存储,它是文档;对于列族存储,它是列族。用 DDD 的术语来说,这组数据是一个DDD 聚合

作者:Martin Fowler

2012 年 1 月 19 日

阅读更多…

博客文章

数据库 NoSQL


大数据(和混乱数据)的增长

曾经有一段时间,人们认为数据管理的未来是单一的、权威的、结构良好的数据源。但数据来自不同的地方,天生就杂乱无章,而且数量越来越多。这意味着我们需要不同的工具来管理数据,需要不同的理念来思考数据,我们还需要思考我们在获取数据时所承担的社会责任。

思考大数据

“大数据”已迅速跃升为我们行业中最热门的词汇之一,但这种炒作不应该让人们忽视一个事实,即这是数据在世界中作用的真正重大转变。数据源的数量、速度和价值正在迅速增长。数据管理必须在五个广泛的领域发生变化:从更广泛的来源提取数据、使用新的数据库和集成方法改变数据管理的物流、在运行分析项目中使用敏捷原则、强调解释数据的技术以区分信号和噪声,以及精心设计的可视化以使信号更容易理解的重要性。总而言之,这意味着我们不需要大型分析项目,而是希望新的数据思维能够渗透到我们的日常工作中。

作者:Martin Fowler

2013 年 1 月 29 日

阅读更多…

信息图

数据分析 信息平台

演讲:不断发展的数据全景

我们在 2012 年伦敦 QCon 大会上的主题演讲着眼于数据在我们生活中所扮演的角色(它所做的不仅仅是变得越来越大)。我们首先看看数据世界是如何变化的:它正在增长,变得更加分散和互联。然后,我们转向行业的反应:NoSQL 的兴起、向服务集成的转变、事件溯源的出现、云的影响以及更加重视可视化的新分析。我们快速浏览了数据目前的使用方式,Rebecca 特别强调了发展中国家的数据。最后,我们考虑所有这一切对我们作为软件专业人员的个人责任意味着什么。

与 Rebecca Parsons 合作

2012

更多…

视频

47 分钟

数据湖

数据湖是近十年来出现的一个术语,用于描述大数据世界中数据分析管道的重要组成部分。其理念是为组织中任何可能需要分析的人提供所有原始数据的单一存储库。人们通常使用 Hadoop 来处理湖中的数据,但这个概念比 Hadoop 更广泛。

作者:Martin Fowler

2015 年 2 月 5 日

阅读更多…

博客文章

数据库 数据分析

数据最小化

Datensparsamkeit 是一个德语单词,很难准确地翻译成英语。这是我们如何捕获和存储数据的一种态度,即我们应该只处理我们真正需要的数据。

作者:Martin Fowler

2013 年 12 月 12 日

阅读更多…

博客文章

数据库 Web 开发 互联网文化 法律 数据分析 隐私

机器辩护

我记得在我十几岁的时候,有人告诉我人工智能 (AI) 在未来几年会做出多么奇妙的事情。现在几十年过去了,其中一些似乎正在发生。最近的胜利是计算机通过相互对弈来学习下围棋,并迅速变得比任何人类都更加熟练,其策略是人类专家难以理解的。人们很自然地会想知道未来几年会发生什么,计算机是否很快就会拥有比人类更高的智能?(鉴于最近的一些选举结果,这可能不是一个难以逾越的障碍。)

但当我听到这些时,我想起了巴勃罗·毕加索几十年前对计算机的评论:“计算机毫无用处。它们只能给你答案”。机器学习等技术所能产生的推理能力在其结果方面确实令人印象深刻,并且对我们作为软件的用户和开发者来说将非常有用。但答案虽然有用,但并不总是完整的画面。我在上学初期就学到了这一点——仅仅提供数学题的答案只能让我得到几分,要得到满分,我必须展示我是如何得到答案的。得出答案的推理过程比结果本身更有价值。这就是自学成才的围棋 AI 的局限性之一。虽然它们可以获胜,但它们无法解释自己的策略。

作者:Martin Fowler

2017 年 11 月 14 日

阅读更多…

博客文章

数据分析


应用程序和数据

数据需要存储和管理——但最重要的是,我们需要利用数据来驱动我们的系统,帮助人们做出更好的决策。

多语言持久化

2006 年,我的同事 Neal Ford 提出了“多语言编程”一词,以表达应用程序应该用多种语言编写的想法,以便利用不同语言适合解决不同问题的优势。复杂的应用程序结合了不同类型的问题,因此为工作选择合适的语言可能比尝试将所有方面都纳入一种语言更有效率。

在过去的几年里,人们对新语言(尤其是函数式语言)的兴趣激增,我经常想花时间钻研 Clojure、Scala、Erlang 或类似的语言。但我的时间有限,我正在优先考虑另一个更重要的转变,即数据库解冻。第一批成果已经从客户和其他联系人那里传来,前景十分诱人。我可以自信地说,如果您要启动一个新的战略性企业应用程序,您不应该再假设您的持久化应该是关系型的。关系型选项可能是正确的选择——但您应该认真考虑其他选择。

作者:Martin Fowler

2011 年 11 月 16 日

阅读更多…

博客文章

数据库 NoSQL 应用程序架构

报表数据库

大多数企业应用程序都使用数据库来存储持久性数据。该数据库支持应用程序状态的操作更新,以及用于决策支持和分析的各种报表。但是,操作需求和报表需求通常有很大差异——对架构的要求不同,数据访问模式也不同。发生这种情况时,通常明智的做法是将报表需求分离到报表数据库中,该数据库获取基本操作数据的副本,但以不同的架构表示它。

作者:Martin Fowler

2014 年 4 月 2 日

阅读更多…

博客文章

数据库 应用程序架构

类型实例同形异义词

“《战争与和平》是一本很棒的书。

“让我看看……可惜这本书的封面这么破旧”

两句话都使用了“书”这个词。我们每天都会浏览这样的组合,却没有注意到“书”这个词在每个句子中的意思都完全不同。

作者:Martin Fowler

2007 年 1 月 11 日

阅读更多…

博客文章

领域驱动设计

对 ORM 的憎恨

几个月前,我在伦敦参加 QCon 大会时,似乎每场演讲都包含一些对对象/关系映射 (ORM) 工具的尖刻评论。我想我应该更仔细地阅读发送给演讲者的会议电子邮件,毫无疑问,其中有一些内容告诉我们所有人每 45 分钟至少要对 ORM 表示一次蔑视。但正如您所知,我想稍微反驳一下这种对 ORM 的憎恨——因为我认为其中很多都是没有根据的。

作者:Martin Fowler

2012 年 5 月 8 日

阅读更多…

博客文章

数据库 应用程序架构

内存映像

当人们启动企业应用程序时,最早的问题之一是“我们如何与数据库对话”。如今,他们可能会问一个稍微不同的问题:“我们应该使用哪种数据库——关系型数据库还是这些 NoSQL 数据库中的一种?”但还有另一个问题需要考虑:“我们是否应该使用数据库?”

作者:Martin Fowler

2011 年 8 月 31 日

阅读更多…

博客文章

数据库 应用程序架构 事件架构

用户定义字段

软件系统中的一项常见功能是允许用户在数据结构中定义自己的字段。以地址簿为例——您可能想添加很多东西。随着每天都有新的社交网络涌现,用户可能希望为他们的联系人添加一个 Bunglr ID 的新字段。

作者:Martin Fowler

2013 年 7 月 23 日

阅读更多…

博客文章

数据库 应用程序架构 API 设计