Amazon.com 如何使用键值数据存储?

Posted

技术标签:

【中文标题】Amazon.com 如何使用键值数据存储?【英文标题】:How does Amazon.com function with a key-value datastore? 【发布时间】:2011-01-01 02:37:40 【问题描述】:

我听说亚马逊使用键值数据存储——它不使用传统的关系规范化数据库。作为一个只使用过传统方法的人来说,这是如何工作的?您不需要执行以下操作吗?

select * from book where book_id = n

或者一个:

select * from book where author_id = y

如果没有规范化的数据库,您如何构建一个包含如此多数据和如此多关系的网站/应用程序?

【问题讨论】:

他们真的使用键值存储作为他们的主数据库吗?虽然 Amazon Web Services 向公众提供 SimpleDB(一个键值数据存储),但这并不意味着他们只将它用于内部需求。 好问题 - 我不确定! 【参考方案1】:

Amazon.com 的架构非常有趣。他们转向了面向服务的架构,如果您查看他们网站上所有不同的内容区域,每个内容区域都由不同的服务提供服务。所以有“愿望清单”服务和“与您查看过的项目相关”服务,以及畅销书服务、购物车服务等。

每项服务都有自己的一组要求和功能。要求包括响应时间和可用性等内容。在内部,每个服务都是使用最适合需求的任何数据库来实现的。键值存储非常适合购物车,因为您永远不需要这样做:

select * from book where book_id = n

在购物车上。

需要意识到的重要事情之一是可用性在亚马逊规模上发挥的巨大作用。想想亚马逊 2008 年的收入是 191.66 亿美元。 Amazon.com 网站的总零售收入在白天可能超过每秒 1000 美元(据我所知,在高峰时段可能是每秒的两倍。在假日购物高峰期可能是 5 倍)。如果购物车服务在高峰使用期间中断 3 分钟,请考虑成本。很明显,放弃购物车的损失将是一笔巨大的美元价值。

使用键值存储并不意味着接受猖獗的数据重复,而是意味着重新设计应用程序,使必要的数据不需要全部放在一个单一的数据库中。

亚马逊实际上更像是一个应用程序平台,而不是其他任何东西。这是 video of Amazon's CTO 正在谈论的问题。

【讨论】:

【参考方案2】:

您可能希望通过查看这些 Stack Overflow 文章来开始您的研究:

Non-Relational Database Design How to think in data stores instead of databases? Pro’s of databases like BigTable, SimpleDB GAE - How to live with no joins? What’s the point of using Amazon SimpleDB? Eventual Consistency App Engine datastore does not support operator OR

Amazon 数据存储以SimpleDB 的形式向公众提供,它是Amazon Web Services 的一部分。

另请注意,Google 为 Google App Engine 提供了类似的“sparse, distributed multi-dimensional sorted map”数据存储。

【讨论】:

【参考方案3】:

它仅将其 Dynamo 键值存储用于其购物车并选择其他应用程序。

【讨论】:

以上是关于Amazon.com 如何使用键值数据存储?的主要内容,如果未能解决你的问题,请参考以下文章

如何将日志从 Amazon S3 存储桶导入到 cloudwatch

如何使 JavaScript 中每个元素的 map 函数的键值递增

如何使用 PHP 从 Amazon.com 页面获取图像和数据?

如何授予 Amazon SES 写入您的 Amazon S3 存储桶的权限

Redis使用(Java)

如何使每个表中的主键值应从数字一(1)开始 - PostgreSQL,Spring data jpa