ner*_*hon 0 database get put amazon-s3 amazon-web-services
我正在考虑将S3用于后端持久存储.
但是,根据架构选择,我预测一些存储桶可能需要存储数十亿个小对象.
假设我使用UUID作为键,GET对象和PUT对象如何在这些条件下执行?我可以期待O(1),O(logN)或O(n)性能吗?
我是否需要重新考虑我的架构并以某种方式细分更大的存储桶以保持性能?我需要对象查找(GET)尽可能快.
虽然它可能适用于具有真正令人难以置信的请求量的S3客户,但基于S3的内部架构,亚马逊确实有一些提示可以充分利用S3:
通过密钥名称以字母数字递增的顺序对特定桶执行PUT可以减少每个单独呼叫的总响应时间.以任何排序顺序执行GET可以产生类似的效果.对象越小,这可能会影响整体吞吐量.
从单个客户端执行许多请求时,请使用多线程来启用并发请求.
考虑使用一小组字符对哈希表示前缀.十进制哈希很好地工作.
考虑使用以不同字母数字字符开头的多个存储桶.这将确保从一开始就进行一定程度的分区.并发PUT和GET请求的数量越大,这可能产生的影响就越大.
如果您将从Amazon EC2实例中针对Amazon S3发出GET请求,则可以通过在Amazon EC2中执行这些对象的PUT来最小化这些调用的网络延迟.
以下是来自AWS的一篇很好的文章,深入介绍了哈希前缀策略,并解释了何时它是不必要的:
http://aws.typepad.com/aws/2012/03/amazon-s3-performance-tips-tricks-seattle-hiring-event.html
结论:您计划将数十亿个对象放在一个桶中使用UUID作为密钥应该没问题.如果您有令人发指的请求量,您可以将其拆分为多个具有不同前导字符的存储桶,以实现更好的分区.
如果您要在AWS上花费很多钱,请考虑与亚马逊联系,并与他们讨论这种方法.
| 归档时间: |
|
| 查看次数: |
2692 次 |
| 最近记录: |