什么是键值数据库?
键值数据库的优点
传统的关系数据库(SQL 数据库)以包含行和列的表的形式存储数据。它们对数据强制执行严格的结构,并不是每个使用案例的最佳选择。相对应地,键值数据库是 NoSQL 数据库。它们可以采用灵活的数据库架构,对于某些使用案例,可以大规模提高性能。键值存储的优点包括:
可扩展性
由于每次用户查询都需要进行数据交互,因此数据库往往会成为应用程序性能的瓶颈。解决该问题的几种策略(例如复制和分片)会增加应用程序代码的复杂性。许多键值数据库都为高级扩缩功能提供内置支持。这些数据库可以水平扩展,并自动在服务器之间分配数据,以减少单台服务器的瓶颈。
易于使用
键值数据库遵循面向对象的范式,允许开发人员将现实世界中的对象直接映射到软件对象。一些编程语言(例如 Java)也遵循相同的范式。工程师可以创建与其代码对象相匹配的键值对,而不是将其代码对象映射到多个底层表。这使得键值存储更直观,便于开发人员使用。
性能
键值数据库通过低开销的服务器调用来处理持续的读写操作。改进的延迟和更短的响应时间可以大规模提高性能。它们基于简单的单表结构,而不是多个相互关联的表。与关系数据库不同,键值数据库不必执行需要大量资源的表联接,因此可以大大加快连接速度。
键值数据库的使用案例
您可以使用键值数据库系统作为应用程序的主数据库,也可以用它来处理细分类别需求。我们在下面给出了一些键值数据库使用案例的示例。
会话管理
一个面向会话的应用程序(如 Web 应用程序)在用户登录某个应用程序时启动会话,并保持活动状态直到用户注销或会话超时。在此期间,该应用程序会将所有用户会话属性存储在主内存或数据库中。用户会话数据可能包括个人资料信息、消息、个性化数据和主题、建议、有针对性的促销和折扣。
每个用户会话具有唯一的标识符。除了主键之外,任何其他键都无法查询会话数据,因此快速键值存储更适合于会话数据。一般来说,键值数据库所提供的每页开销可能比关系数据库要小。
购物车
在假日购物季,电子商务网站可能会每秒收到数十亿的订单。键值数据库可以处理大量数据扩展和极高的状态变化,同时还通过分布式处理和存储为数百万并发用户提供服务。此外,键值存储还具有内置冗余,可以处理丢失的存储节点。
元数据存储引擎
您的键值存储可以充当底层存储层,以实现更高级别的数据访问。例如,您可以扩展媒体和娱乐工作负载(例如实时视频流和交互式内容)的吞吐量和并发度。您还可以使用玩家数据、会话历史记录和数百万并发用户的排行榜构建您的游戏平台。
缓存
您可以使用键值数据库来临时存储数据,以便更快地进行检索。例如,社交媒体应用程序可以存储经常访问的数据,例如新闻源内容。内存数据缓存系统也使用键值存储来加速应用程序的响应。
键值数据库的工作原理
键值数据库的工作原理是将所有数据组织成一组键值对。您可以将密钥视为问题,将值视为问题的答案。在下面的示例中,主键是两个密钥的组合,即产品 ID 和类型。产品 ID 是分区键,用于描述项目将存储在哪个分区。类型是排序键,决定项目在磁盘中的存储顺序。分区键和排序键的组合构成一个唯一的主键,该主键映射到数据库中的单个值。
在此示例中,数据对象手册具有标题、作者和发布日期等属性。每个图书数据对象都有一个名为 BookID 的密钥。您可以直接在键值存储中将 BookID 和关联的图书对象链接起来。此外,您还可以通过在表中查找 BookID 来检索数据。此外,每个项都有自己的架构,这使得键值存储非常灵活,可以存储不同结构的数据。
键值数据库的特征
根据您选择的解决方案,您的键值存储可能具有一些其他特征,如下所示。
支持复杂的数据类型
键值存储支持已定义的数据类型,例如整数和文本。但是,其中许多也可以支持更复杂的对象,例如数组、嵌套字典、图像、视频和半结构化数据。通过向数据库提供有关您的数据的更多信息,可以进一步提升存储和查询性能的优化空间。
无需表联接
键值数据库不需要执行任何需要大量资源的表联接。它们十分灵活,可将所有需要的信息整合在一个表中。这就是键值存储表现如此出色的原因之一。
对键进行排序
键值存储可以对键进行排序,以便系统地存储数据并实现分区。例如,可以通过以下方式对键进行排序:
- 按字母顺序或数字顺序
- 按时间顺序
- 按数据大小
假设有一个使用客户的电子邮件地址作为唯一密钥的键值存储。电子邮件地址可以按字母顺序排序,因此 A-J 电子邮件列表的所有数据都存储在服务器 1 上,K-S 存储在服务器 2 上,依此类推。
支持次级键
某些键值存储允许您定义两个或多个不同的键或二级索引来访问相同的数据。例如,您可以按主要电子邮件地址和主要电话号码来存储客户数据。
复制
许多键值存储通过自动跨多个存储节点复制数据来提供内置的复制支持。这有助于从灾难中自动恢复;如果服务器出现故障,您仍然可以保留数据。
分区
分区是跨节点分配数据的方式。许多键值数据库都提供默认的分区选项。有些还提供为分区定义输入参数的选项。例如,您可以将每 1000 个数字键分为一组。高级键值数据库还自动支持将键值数据库分发到多个地理位置。这提高了应用程序的可用性和可靠性,因为您可以在用户所在地附近响应查询。
ACID 支持
原子性、一致性、隔离性和持久性(ACID)是数据库属性,可确保数据在所有情况下准确可靠。例如,如果您按顺序对数据进行多项更改,原子性将要求所有更改都按顺序进行。如果一项更改失败,则所有更改都会失败。
高级键值数据库为 ACID 提供服务器端的原生支持。这使开发人员能够在表内和跨表对多个项目进行“全有或全无”的协调式更改。利用事务支持,开发人员可以将规模、性能和企业优势扩展到更广泛的任务关键型工作负载。
键值数据库的限制
键值数据库确实需要权衡取舍,这一点与任何类型的技术选择一样。
无法进行复杂的查询
由于键值数据库不支持复杂的查询,因此开发人员必须在代码中解决这个问题。数据操作主要通过简单的查询语言术语进行,例如 get、put 和 delete。在访问数据之前,您可以对数据进行筛选和排序的程度有限制。
架构管理不善
键值存储设计不强制开发人员使用架构。任何人都可以在数据库程序中修改架构。开发团队必须系统地规划数据模型,以避免出现长期问题。缺乏严格的架构也意味着应用程序需要负责正确解释其使用的数据,通常被称为“读取时架构”。
AWS 如何满足您的键值数据库需求
Amazon DynamoDB 是最受欢迎的键值数据库之一,专为运行任何规模的高性能应用程序而设计。它是一个完全托管的多区域、多活动数据库,提供以下功能:
- 无限的可扩展性(包括缩放到零),延迟低至个位数毫秒级。
- 无服务器,无需版本升级,没有维护时段,也无需管理服务器或软件。
- 专为 99.999% 的可用性而设计,DynamoDB 全局表提供主动-主动复制,因此您可以构建具有本地读取性能的全球分布式应用程序。
- 具有静态默认加密、时间点故障恢复、按需备份和还原等功能,高度安全可靠。
- 易于使用,可与多项 AWS 服务集成,包括从 Amazon S3、Amazon Kinesis Data Streams、Amazon CloudWatch 等服务批量导入/导出。
通过这个关于创建和查询 NoSQL 表的分步教程,只需 10 分钟,即可启动并运行 DynamoDB。立即创建免费账户,开始使用 AWS 上的键值数据库!