我应该如何为我的应用程序构建Amazon Web Services?

时间:2013-01-13 01:25:34

标签: ios amazon-web-services amazon-s3 amazon-ec2

我正计划开发一个社交网络应用程序。我已经拥有使用许多AWS服务的经验,这些服务包括:SES,SimpleDB,DynamoDB,CloudFront和S3。我愿意随时学习更多知识。

基本上在应用中,您有状态更新。每个用户都有一个帐户,可以上传自己的状态更新,例如,对状态更新等进行评论。用户可以在过去的'x'小时内查看最喜欢的状态更新,还可以在整个数据库中搜索状态更新通过搜索用户名或搜索状态更新关键字 - 例如用户在创建时指定的YouTube标记。

这是我目前的架构:

  • 使用DynamoDB在S3上托管具有属性的每个状态更新密钥,并使用范围查询来比较like,timestamp,
  • 使用SimpleDB托管S3的所有帐户密钥和其他密钥以及要查询的属性
  • 使用Amazon S3托管所有帐户数据和状态更新数据
  • 使用CloudFront在全球范围内分发S3存储桶内容

因此,当用户想要查看最后一天最受欢迎的状态更新时,它会查询DynamoDB,以便在24小时的时间戳内找到最喜欢的状态更新。如果用户想要搜索以获取状态更新的标记,则DynamoDB将拥有tags属性并对其进行查询。但DynamoDB可以查询字符串吗?看看字符串是否匹配?我不这么认为......我不想扫描DynamoDB并根据其格式单独匹配密钥。命名约定可以包括内部属性,例如状态更新的密钥名称可以是:

  

max:UploadedQuote:ijfi93nSNDiI:numberOfLikes =“3499”

或类似的东西

这是因为扫描限制为10 MB,我认为平均而活跃的用户群可能无法解决,我不想发送多个请求并使应用程序膨胀。 如果用户想要查看某人的帐户,它会在SimpleDB上找到密钥并将其加载到S3上。

显然,特定用户的状态更新必须组织到他们的帐户对象中,但我需要一个单独的对象来保存所有状态更新(DynamoDB) - 否则我怎样才能让用户在整个过程中搜索状态更新数据库?

我认为最难的部分是按喜欢和标签排序,我需要以某种方式拥有像DynamoDB这样的数据库,快速且可扩展,但能够像SimpleDB一样进行查询。我想使用AWS。我知道这是可能的,因为我知道一个名为PanoPerfect的应用程序使用AWS,它们具有与我计划的相似的功能。我想知道他们的架构如何运行。 Instagram也是!

显然托管SimpleDB上的所有状态更新更有意义,因为您可以正确查询它们,我甚至不确定DynamoDB的查询是否按照我的计划运行,但是如果我托管每一个状态更新,它将溢出SimpleDB并使其膨胀。但DynamoDB可能很昂贵。

这有更好的架构吗?我应该使用CloudSearch进行搜索而不是使用此DynamoDB进程吗? CloudSearch是否可在iOS上使用? EC2怎么样?这是如何运作的?我很不确定如何在规划的这个阶段用AWS构建我的应用程序。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

听起来您决定使用亚马逊的NoSQL数据库之一。如果它不起作用,请不要使用它。

我的建议是尽可能地构建最简单的东西,并专注于让用户占据先机。 Twitter,Facebook,Ebay以及其他所有前1000名网站都是以常规数据库开始的,并且在受欢迎时担心扩展。

如果您真的担心缩放,请查看CouchDB,Cassandra或Riak。它们具有简单的缩放语义。 (与MongoDB或MySQL不同,您必须进行复杂的手动分片。)

  

DynamoDB可以查询字符串吗?看看字符串是否匹配?

您只能查询主索引或辅助索引。您可以将标记投影到二级索引中。但是他们只能查询确切的标签匹配。

  

iOS上是否提供CloudSearch? EC2怎么样?

是。与所有服务一样,它是一个Web API。

  

这是如何运作的?

对于Stack Overflow来说,这不是一个真正的问题