不再有一刀切数据库这回事。现代应用依赖多种数据库类型,从实时分析到 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
11. 文本搜索(Text-search)
- 全文索引和搜索与排名、过滤和分析
- 示例: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:有人输入 bytebytego.com 到他们浏览器并按下 enter
- 步骤 2:在做任何事前,浏览器查找缓存 IP 地址。操作系统缓存也检查
- 步骤 3:缓存未命中触发 DNS 查询。浏览器发送查询到配置 DNS 解析器,通常由你 ISP 或服务如 Google DNS 或 Cloudflare 提供
- 步骤 4:解析器检查自己缓存
- 步骤 5-6:如果解析器没有答案缓存,它问根服务器,“我在哪里可以找到.com?“对于 bytebytego.com,根服务器响应带.com TLD 名称服务器地址
- 步骤 7-8:解析器查询.com TLD 服务器。TLD 服务器返回权威服务器地址
- 步骤 9-10:这个服务器有实际 A/AAAA 记录映射域名到 IP 地址。解析器最终得到答案:172.67.21.11 对于 bytebytego.com
- 步骤 11-12:IP 在解析器级别缓存未来查找,并返回到浏览器
- 步骤 13-14:浏览器存储这个为自己未来使用,并使用 IP 进行实际 HTTP 请求
- 步骤 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。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。