我听说亚马逊使用键值数据存储 - 它不使用传统的关系规范化数据库.作为一个只使用传统方法的人,这是如何工作的?你不需要做以下事情吗?
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亿美元.来自亚马逊网站的零售总收入在白天可能超过每秒1000美元(据我所知,在高峰时段可能会增加一倍.它可能是高峰假期购物时的5倍).想想购物车服务在高峰期使用时间下降3分钟的成本.很明显,损失将是放弃推车中的巨大美元价值.
使用键值存储并不意味着拥有猖獗的数据重复,这意味着重新设计应用程序,因此必需的数据不需要全部放在一个整体数据库中.
亚马逊实际上是一个应用程序平台,而不是其他任何东西.这是亚马逊CTO正在谈论的视频.
您可以通过查看这些Stack Overflow文章来开始您的研究:
非关系数据库设计
如何在数据存储而不是数据库中思考?
Pro的数据库,如BigTable,SimpleDB
GAE - 如何生活没有加入?
使用Amazon SimpleDB有什么意义?
最终的一致性
App Engine数据存储区不支持运算符OR
Amazon数据存储区作为SimpleDB提供给公众,SimpleDB是Amazon Web Services的一部分.
另请注意,Google为Google App Engine提供了类似的" 稀疏,分布式多维排序地图 "数据存储区.