[译]关系数据库设计速成课程

原文链接:https://blog.bytebytego.com/p/a-crash-course-on-relational-database

在当今数据驱动的世界中,高效存储和管理信息是各种规模的企业和组织的关键要求。

关系数据库提供了一个强大的框架,用于根据实体之间明确定义的关系来存储和检索数据。它们提供了一种结构化的数据管理方法,使用户能够:

  • 定义表
  • 建立关系
  • 执行复杂查询以从存储的信息中提取有意义的见解

然而,仅仅使用关系数据库还不足以获得其好处。

有效的数据库设计对于优化性能、确保数据完整性和促进高效的数据检索至关重要。数据库设计原则(例如规范化、索引、连接和关系)在创建结构良好且性能良好的数据库中起着至关重要的作用。

More »

[译]分布式系统速成课程

原文链接:https://blog.bytebytego.com/p/a-crash-course-on-distributed-systems

分布式系统是多台计算机(也称为节点)的集合,它们协作执行特定任务或提供服务。

这些节点在物理上是分开的,并通过网络传递消息相互通信。分布式系统可以跨越地理边界,使其能够利用来自不同位置的资源。

img

分布式系统有几个区别于传统集中式系统的特点:

  • 分布式系统中的计算机在物理上是分开的,并通过网络连接。它们不共享内存或公共时钟。
  • 从外部视角来看,分布式系统对于最终用户来说是一个单一、统一的实体。
  • 分布式系统提供了在系统中添加或删除计算机的灵活性。
  • 分布式系统中的节点需要相互协调并达成一致才能一致地执行操作。
  • 分布式系统中的节点可能独立发生故障,并且消息可能会在网络上丢失或延迟。

分布式系统在我们的日常生活中无处不在。例如 Google 搜索等大型 Web 应用程序、在线银行系统、多人游戏等。这些系统利用多台计算机协同工作,提供无缝且响应迅速的用户体验。

More »

[译]数据库分片速成课程

原文链接:https://blog.bytebytego.com/p/a-crash-course-in-database-sharding

随着应用程序越来越受欢迎,它会吸引更多活跃用户并加入更多功能。这种增长导致每日数据生成量增加,从业务角度来看,这是一个积极的指标。

然而,它也给应用程序的架构带来挑战,特别是在数据库可扩展性方面。

数据库是任何应用程序的关键组件,但它也是最难水平扩展的组件之一。当应用程序的流量和数据量增加时,数据库可能会成为性能瓶颈,影响用户体验。

分片是一种解决数据库横向扩展难题的技术。它涉及将数据库划分为更小、更易于管理的单元(称为分片)。

在这篇文章中,我们将介绍数据库分片的基础知识,探讨其各种方法、技术考虑因素,以及展示公司如何实施分片来扩展其数据库的真实案例研究。

img

什么是分片?

分片是一种架构模式,用于解决管理和查询数据库中大型数据集的难题。它涉及将大型数据库拆分为更小、更易于管理的部分(称为分片)。

More »

[译]数据库扩展策略速成课程

原文链接:https://blog.bytebytego.com/p/a-crash-course-in-database-scaling

数据库是现代应用程序开发的支柱。它们在存储、管理和检索数据方面发挥着至关重要的作用,使应用程序和服务能够有效运行。

随着应用程序越来越受欢迎并吸引越来越多的用户群,数据库面临着处理不断增加的数据量、并发用户和复杂查询的挑战。

有效地扩展数据库以确保最佳性能和良好的用户体验变得至关重要。

数据库扩展是调整和扩展数据库基础架构以适应增长并在负载增加的情况下保持性能的过程。它涉及采用各种技术和策略来有效地分配数据,优化查询执行并明智地利用硬件资源。

组织和开发人员必须了解并实施正确的数据库扩展策略。针对特定情况选择错误的策略可能会弊大于利。

在这篇文章中,我们将详细介绍最流行的数据库扩展策略,讨论它们的优点和权衡。

img

More »

[译]领域驱动设计速成课程

原文链接:https://blog.bytebytego.com/p/a-crash-course-on-domain-driven-design

为复杂领域开发软件是一项具有挑战性的任务。

随着问题领域的复杂性不断增长,创建准确表示业务概念、规则和流程的软件变得越来越困难。设计不良的软件很快就会变成难以理解、难以维护和扩展的混乱代码。

领域驱动设计(DDD)为这个问题提供了解决方案。

DDD 是一种软件开发方法,它通过强调对核心领域和业务逻辑进行建模的重要性并使用这些模型作为软件设计的基础来解决领域复杂性。

领域驱动设计的核心是:

  • 将主要焦点放在核心领域上。
  • 基于领域模型的复杂设计
  • 建立技术专家和领域专家之间的协作。

近年来,领域驱动设计的需求愈发迫切。基于微服务和云计算的架构已导致系统由众多以复杂方式交互的小组件组成。如果没有清晰且定义明确的领域模型来指导其设计,此类系统很快就会变成“一团泥球”。

More »

如何设计一个分布式ID生成器保证ID按时间有序?

很多业务有生成唯一 ID 并作为数据库主键的需求。数据库会在这个字段上建立聚集索引(参考 MySQL InnoDB),即该字段会影响各条数据再物理存储上的顺序。

ID还要尽可能,节省内存,让数据库索引效率更高。基本上64位整数能够满足绝大多数的场景,但是如果能做到比64位更短那就更好了。需要根据具体业务进行分析,预估出ID的最大值,这个最大值通常比64位整数的上限小很多,于是我们可以用更少的bit表示这个ID。

查询的时候,往往有分页或者排序的需求,所以需要给每条数据添加一个时间字段,并在其上建立普通索引(Secondary Index)。但是普通索引的访问效率比聚集索引慢,如果能够让ID按照时间粗略有序,则可以省去这个时间字段。为什么不是按照时间精确有序呢?因为按照时间精确有序是做不到的,除非用一个单机算法,在分布式场景下做到精确有序性能一般很差。

More »

[译]《Grokking the System Design Interview》设计Dropbox

这是一篇双语翻译的文章,原文出自 grok_system_design_interview.pdf 的一篇文章《Designing Dropbox》设计 Dropbox。


Let’s design a file hosting service like Dropbox or Google Drive. Cloud file storage enables users to store their data on remote servers. Usually, these servers are maintained by cloud storage providers and made available to users over a network (typically through the Internet). Users pay for their cloud data storage on a monthly basis. Similar Services: OneDrive, Google Drive Difficulty Level: Medium

More »

[译]《Grokking the System Design Interview》设计Facebook Messenger

这是一篇双语翻译的文章,原文出自 grok_system_design_interview.pdf 的一篇文章《Designing Facebook Messenger》设计 Facebook Messenger。


Let’s design an instant messaging service like Facebook Messenger where users can send text messages to each other through web and mobile interfaces. 让我们设计一个像 Facebook Messenger 这样的即时消息服务,用户可以通过网络和移动界面互相发送短信。

More »