设计关键价值商店
#database #体系结构 #工程师 #systems

NASA-arial-view

您已经构建了一个了不起的应用程序,并且可以为世界各地数百万人提供扩展。您已经准备好从人们那里收集大量数据,并利用它具有最大的潜力。但是,您将如何存储全部?也许您应该考虑一个钥匙值商店。那是什么?

根据Alex Xu的“系统设计访谈,内部人员指南”。

一个键值存储是一个数据存储系统,该数据存储数据作为键值对的集合,其中每个值都与唯一键关联。

好吧!但是你怎么做一个?让我们看一下设计钥匙值商店的(简短且淡化的)概述。

以下内容包含一些系统设计概念,您在设计第一个键值商店时应考虑:

首先,这种类型的数据存储通常用于许多现实世界应用中,例如缓存系统,会话商店和分布式系统。您已经有一个需要存储大量数据的应用程序。但是,在事实之后分发该数据的最佳方法是什么。答案是,这取决于。但是在您做出最终决定之前,是时候停止并考虑 cap定理。你听说过帽子吗? ð§¢当然不是您戴上帽子!

CAP 代表:一致性,可用性和分区耐受性。简而言之,理论表明,数据库一次不可能一次维持其中两个以上的概念。 Click Here的文章对该主题进行了深入的概述。

设计钥匙值商店时,您需要考虑一致性和可用性之间的权衡。一致性确保系统中的所有节点都具有相同的数据视图,而可用性可确保系统始终启动并运行。您应该选择一个满足应用程序需求的一致性模型,例如最终一致性或强大的一致性。您将需要对关键价值存储的最重要特征做出决定。这意味着您需要选择合适的帽子以相应维护系统。

更大的工作需要更大的存储空间。如果您的应用程序需要多个服务器,则需要对数据进行分区并将其存储在多个服务器上。根据数据集的大小,您可能需要在多个节点或服务器上划分数据。 数据分配是将数据集分为较小的子集并在多个机器上分配它们的过程。您应该选择一个允许有效的数据访问并最大程度地减少数据移动的分区方案。与虚拟节点保持一致的散列可能是您应用程序的一个很好的解决方案。

设计键值商店时,您还需要确定数据模型。您应该确定需要存储哪些数据以及如何存储它。这个非常重要。例如,您可以将字符串,整数或JSON对象存储为值。您可能还需要考虑如何处理太大而无法适合内存的大对象或值。

存储引擎负责从密钥值商店存储和检索数据。您应该选择一个可以有效处理数据模型并扩展以满足您需求的存储引擎。钥匙值商店的流行存储引擎包括LevelDB,RockSDB和Redis。

为了确保数据可用性和耐用性,您可能需要在多个节点或服务器上复制数据。 复制确保如果一个节点失败,则仍然可以从另一个节点访问数据。您应该选择一个平衡数据一致性,可用性和性能的复制方案。该系统还应考虑处理故障的责任。可以将失败最小化,但不能完全避免(下次运气更好)。

缓存可以通过减少磁盘读取或网络请求的数量来帮助提高密钥值商店的性能。您应该考虑在系统的不同级别上实施缓存,例如在客户端或服务器级别,具体取决于您的性能要求。

最后,您应该考虑如何监视和管理键值商店。您应该实施工具来监视系统健康,跟踪性能指标以及管理备份和故障转移过程。

构建系统体系结构:

键值存储是一种数据库,该数据库将数据存储为键值对集合。这些密钥用于唯一识别商店中的每个值,并且值是正在存储的实际数据。如果您知道什么是“键值”对,这个概念似乎很熟悉。

考虑到这一点,在钥匙值商店系统体系结构中,通常有三个主要组件:

客户端:客户端是想要从键值存储存储或检索数据的用户或应用程序。它通过商店提供的一组API与钥匙值商店进行通信。

键值存储:这是存储键值对的系统体系结构的主要组成部分。它收到客户的请求并相应地处理。可以使用各种存储技术(例如内存,基于磁盘的存储或分布式文件系统)实现密钥值商店。

数据访问层:该层负责管理键值存储中数据的存储和检索。它为键值商店提供了与基础存储技术交互的接口。

除了这三个组件外,还要记住考虑其他组件,例如负载平衡器,缓存层和复制机制,可以帮助提高钥匙值商店的性能和可用性。

通过考虑所有这些概念,您可以创建一个符合应用程序性能,可扩展性和可用性要求的键值商店。就是这样。如果您有任何疑问,或者想对此概念进行对话。在下面给我留言。

工程学应该很容易被柠檬汁挤压,但我所拥有的只是酸柠檬水。 ð