《设计数据密集型应用》笔记
2026/2/9大约 2 分钟
《设计数据密集型应用》笔记
微服务主要是人员问题的技术解决方案:允许不同的团队独立取得进展,而无需相互协调。这在大公司中很有价值,但在没有很多团队的小公司中,使用微服务可能是不必要的开销,最好以最简单的方式实现应用程序
如果你正在构建一个目前只有少数用户的新产品,也许是在初创公司,首要的工程目标通常是保持系统尽可能简单和灵活,以便你可以在了解更多关于客户需求时轻松修改和调整产品的功能 78。在这种环境中,担心未来可能需要的假设规模是适得其反的:在最好的情况下,对可伸缩性的投资是浪费的努力和过早的优化;在最坏的情况下,它们会将你锁定在不灵活的设计中,并使你的应用程序更难发展。
大多数文档数据库以及关系数据库中的 JSON 支持不会对文档中的数据强制执行任何模式。关系数据库中的 XML 支持通常带有可选的模式验证。没有模式意味着可以将任意键和值添加到文档中,并且在读取时,客户端不能保证文档可能包含哪些字段。
文档数据库有时被称为 无模式,但这是误导性的,因为读取数据的代码通常假设某种结构 —— 即存在隐式模式,但数据库不强制执行 17。更准确的术语是 读时模式(数据的结构是隐式的,只有在读取数据时才解释),与 写时模式(关系数据库的传统方法,其中模式是显式的,数据库确保所有数据在写入时都符合它)形成对比 1
规范化与反规范化的权衡
最可扩展的方法可能涉及反规范化某些内容并保持其他内容规范化
规范化数据通常写入更快(因为只有一个副本),但查询更慢(因为它需要连接);反规范化数据通常读取更快(连接更少),但写入更昂贵(更多副本要更新,使用更多磁盘空间)。
星型模式
