我听说亚马逊使用键值数据存储——它不使用传统的关系规范化数据库。作为一个只使用过传统方法的人来说,这是如何工作的?您不需要执行以下操作吗?
select * from book where book_id = n
或者一个:
select * from book where author_id = y
如果没有规范化的数据库,您如何构建具有如此多数据和如此多关系的站点/应用程序?
我听说亚马逊使用键值数据存储——它不使用传统的关系规范化数据库。作为一个只使用过传统方法的人来说,这是如何工作的?您不需要执行以下操作吗?
select * from book where book_id = n
或者一个:
select * from book where author_id = y
如果没有规范化的数据库,您如何构建具有如此多数据和如此多关系的站点/应用程序?
Amazon.com 的架构非常有趣。他们转向了面向服务的架构,如果您查看他们网站上所有不同的内容区域,每个内容区域都由不同的服务提供服务。所以有“愿望清单”服务和“与您查看过的项目相关”服务,以及畅销书服务、购物车服务等。
每个服务都有自己的一组要求和功能。要求包括响应时间和可用性等内容。在内部,每个服务都是使用最适合需求的任何数据库来实现的。键值存储非常适合购物车,因为您永远不需要这样做:
select * from book where book_id = n
在购物车上。
要实现的重要事情之一是可用性在亚马逊规模上发挥的巨大作用。想想亚马逊 2008 年的收入是 191.66 亿美元。Amazon.com 网站的总零售收入在白天可能超过每秒 1000 美元(据我所知,在高峰时段可能是每秒的两倍。在假日购物高峰期可能是 5 倍)。如果购物车服务在高峰使用期间中断 3 分钟,请考虑成本。很明显,遗弃购物车的损失将是巨大的美元价值。
使用键值存储并不意味着接受猖獗的数据重复,它意味着重新设计应用程序,这样必要的数据就不需要全部放在一个单一的数据库中。
亚马逊实际上更像是一个应用程序平台,而不是其他任何东西。这是亚马逊首席技术官的一段视频。
您可能想通过查看这些 Stack Overflow 文章来开始您的研究:
Amazon 数据存储以SimpleDB的形式向公众提供,它是Amazon Web Services的一部分。
另请注意,Google 为Google App Engine提供了类似的“稀疏、分布式多维排序地图”数据存储。
它仅将其Dynamo键值存储用于其购物车并选择其他应用程序。