我想知道Amazon S3和Amazon SimpleDB之间的真正技术差异。从我所了解的来看,两者都可以用于存储和检索键/值对。那么,在什么情况下我需要SimpleDB而不是S3?SimpleDB的架构如何实现更好的性能表现(它是文件系统、数据库后端还是其他)? 额外思考:我知道SimpleDB是关于存储键/值对的。是否有关于如何为查找生成键的哈希索引的信息?
亚马逊在SimpleDB概述页面上介绍了S3和SimpleDB之间的区别。它们将S3对象存储在较慢的存储设备中,将SimpleDB对象存储在更快的存储设备中,这意味着在SimpleDB中存储相同数量的数据比在S3中更昂贵。如果您只是将大型二进制对象作为值进行存储,并且自己存储元数据或可以轻松推导出所需对象的键,则可能只需要使用S3。在需要存储与项目相关联的多个键值对并希望保留基于任何键值对找到项的能力的情况下,应该使用SimpleDB而不是S3。S3允许您在对象中存储键值元数据,但是要根据元数据查找对象,您需要自己检索桶中每个对象的元数据,然后决定要获取哪个(或哪些)项。对于大型存储桶,这可能变得缓慢和昂贵。此外,如果您使用REST API,则有关存储和检索元数据的数量存在限制。SimpleDB对存储的元数据更加灵活。键值对已经建立索引,因此查询速度很快。您可以添加和修改已经在SimpleDB中的键值对,而需要删除并重新创建S3中的对象以更新元数据。但是,键和值的大小有1024字节限制,并且域(桶模拟)中的数据量也有限制。SimpleDB的所有限制都列在SDB开发人员指南中。如果存储具有大量键值元数据的大型对象,则可能使用混合方法。亚马逊的概述页建议在SimpleDB中存储元数据,并将其中一个键值对作为指向对象数据的指针。