不再有一刀切数据库这回事。现代应用依赖多种数据库类型,从实时分析到 AI 向量搜索。知道使用哪种类型可以成就或破坏你系统性能。

数据库类型

1. 关系型(Relational)

  • 传统行和列数据库
  • 适合结构化数据和事务
  • 示例:MySQL、PostgreSQL

2. 列式(Columnar)

  • 优化用于分析
  • 按列存储数据用于快速聚合
  • 示例:ClickHouse、Redshift

3. 键值(Key-Value)

  • 存储数据为简单键值对
  • 启用快速查找
  • 示例:Redis、DynamoDB

4. 内存(In-memory)

  • 在 RAM 中存储数据用于超低延迟查找
  • 理想用于缓存或会话管理
  • 示例:Redis、Memcached

5. 宽列(Wide-Column)

  • 处理海量半结构化数据跨分布式节点
  • 示例:Cassandra、HBase

6. 时间序列(Time-series)

  • 专用于指标、日志和传感器数据与时间作为主要维度
  • 示例:InfluxDB、TimescaleDB

7. 不可变账本(Immutable Ledger)

  • 确保防篡改、加密可验证事务日志
  • 示例:Blockchain 数据库

8. 图(Graph)

  • 模型复杂关系
  • 完美用于社交网络和欺诈检测
  • 示例:Neo4j

9. 文档(Document)

  • 灵活 JSON 类似存储
  • 适合现代应用与演进模式
  • 示例:MongoDB、CouchDB

10. 地理空间(Geospatial)

  • 管理位置感知数据如地图、路线和空间查询
  • 示例:PostGIS
  • 全文索引和搜索与排名、过滤和分析
  • 示例:Elasticsearch

12. Blob

  • 存储非结构化对象如图像、视频和文件
  • 示例:S3、Azure Blob

13. 向量(Vector)

  • 供电 AI/ML 应用通过启用相似性搜索跨嵌入
  • 示例:Pinecone、Milvus、Qdrant

Kafka vs. RabbitMQ

Kafka 和 RabbitMQ 都处理消息,但它们解决根本不同问题。理解差异重要当设计分布式系统。

Kafka

  • 分布式日志
  • 生产者追加消息到分区
  • 那些消息基于保留策略停留,不是因为某人消费它们
  • 消费者以自己节奏拉取消息使用偏移
  • 你可以倒带、重放、重新处理一切
  • 设计用于高吞吐事件流多个消费者需要相同数据独立

RabbitMQ

  • 消息代理
  • 生产者发布消息到交换器
  • 那些交换器路由到队列基于绑定键和模式(direct、topic、fanout)
  • 消息推送给消费者然后删除一旦确认
  • 构建用于任务分发和传统消息工作流

常见错误

  • 使用 Kafka 像队列
  • 使用 RabbitMQ 像事件日志
  • 它们是不同工具构建用于不同用例

DNS 如何工作

你输入域名并点击回车,但在那个网页加载前实际发生什么比大多数人意识到更复杂。DNS 是互联网电话簿,每个你请求触发跨多个服务器查找链。

DNS 解析步骤

  1. 步骤 1:有人输入 bytebytego.com 到他们浏览器并按下 enter
  2. 步骤 2:在做任何事前,浏览器查找缓存 IP 地址。操作系统缓存也检查
  3. 步骤 3:缓存未命中触发 DNS 查询。浏览器发送查询到配置 DNS 解析器,通常由你 ISP 或服务如 Google DNS 或 Cloudflare 提供
  4. 步骤 4:解析器检查自己缓存
  5. 步骤 5-6:如果解析器没有答案缓存,它问根服务器,“我在哪里可以找到.com?“对于 bytebytego.com,根服务器响应带.com TLD 名称服务器地址
  6. 步骤 7-8:解析器查询.com TLD 服务器。TLD 服务器返回权威服务器地址
  7. 步骤 9-10:这个服务器有实际 A/AAAA 记录映射域名到 IP 地址。解析器最终得到答案:172.67.21.11 对于 bytebytego.com
  8. 步骤 11-12:IP 在解析器级别缓存未来查找,并返回到浏览器
  9. 步骤 13-14:浏览器存储这个为自己未来使用,并使用 IP 进行实际 HTTP 请求
  10. 步骤 15:Web 服务器返回请求内容

所有这发生在毫秒,在你第一页甚至开始加载前。

实时通信模式

HTTP 服务器不能自动启动连接到浏览器。结果,Web 浏览器是发起者。我们应该做什么接下来从 HTTP 服务器获取实时更新?

Web 浏览器做重活

  • 短轮询:浏览器重试直到它得到最新数据
  • 长轮询:HTTP 服务器不返回结果直到新数据到达

HTTP 服务器和 Web 浏览器合作

  • WebSocket:全双工
  • SSE (Server-Sent Event):单向

在两种情况,HTTP 服务器可以直接发送最新数据到浏览器在连接建立后。区别是 SSE 是单向,所以浏览器不能发送新请求到服务器,而 WebSocket 是全双工,所以浏览器可以保持发送新请求。

本文为学习目的的个人翻译,译文仅供参考。

原文链接:EP193: Database Types You Should Know in 2025

版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。