系统设计:键值存储
让我们了解一下设计键值存储的基础知识。
键值存储简介
键值存储是分布式哈希表(DHT)。哈希函数生成一个键,键应该是唯一的。
在键值存储中,一个键绑定到一个特定的值,并且不对该值的结构做出任何假设。值可以是一个blob、图片、服务器名字,或者用户想要存储在一个唯一键值下的任何东西。
通常,保持值的大小相对较小(KB到MB)是首选的。我们可以将大型数据放在blob存储中,并在值字段中放置指向该数据的链接。
键值存储在许多情况下都非常有用,例如在Web应用程序中存储用户会话和构建NoSQL数据库。
在分布式环境中,使用具有强一致性和高可用性的传统数据库很具有挑战性。
许多现实世界的服务,例如亚马逊、Facebook、Instagram、Netflix等都使用基于主键的数据存储而不是传统的在线事务处理(OLTP)数据库。
使用键值存储的例子包括畅销书列表、购物车、客户喜好、会话管理、销售排名和产品目录。
键值存储
提示
注意:许多应用程序可能不需要传统关系型数据库管理系统(RDBMS)提供的丰富编程模型。
对于这样的应用程序,使用RDBMS通常在成本和性能方面都很高昂。
我们将如何设计键值存储?
我们将键值系统设计分成以下四个课程:
- 设计键值存储: 我们将定义键值存储的要求并设计API。
- 确保可扩展性和复制: 我们将学习如何使用一致性哈希实现可扩展性,并复制被分区的数据。
- 数据版本控制和实现可配置性: 我们将学习如何解决由多个实体所做的更改引起的冲突,并使我们的系统对不同的用例更具可配置性。
- 实现容错和故障检测: 我们将学习如何使键值存储容错,并如何检测系统中的故障。