我正在制作一个移动iOS应用程序。用户可以创建一个帐户,并上传字符串。它会像推特一样,你可以关注别人,有头像等。我无法估计用户基础,但如果应用程序起飞,总数据集可能相当大。
我将实际对象存储在Amazon S3上,并将键存储在数据库上,列出Amazon S3键是slow。那么哪种存储键更好呢?
这是我对SimpleDB和DynamoDB的了解:
SimpleDB:
- 廉价
- 表现良好
- 专为中小型数据集设计
- 可以使用select表达式进行查询
DynamoDB:
- 成本
- 极可伸缩的
- 执行好;毫秒响应
- 不能查询
这些观点在我的理解中是正确的,DynamoDB更像是杀手。SimpleDB更多的是关于查询和价格(仍然提供良好的性能)。但如果你这样看,这将是更快的,从DynamoDB下载所有键,或做一个选择查询与SimpleDB…困难对吗?一种是使用非常快的数据库来下载批次(然后我们必须匹配它们),另一种是使用性能相当好的数据库来查询和下载少数正确的对象。那么,哪个更快:
DynamoDB下载所有内容并匹配OR SimpleDB查询并下载
(注意:匹配只意味着使用-rangeOfString
和字符串比较,没有功耗或非时间效率或任何服务器端)
我的S3密钥将对所有类型的对象使用这种格式
accountUsername: typeOfObject: randomGeneratedKey
。如果引用的是帐户对象
罗翰:账户:shd83SHD93028rF
或头像:
罗翰:ProfilePic: Nck83S348DD93028rF37849SNDh
我有随机生成的唯一性密钥,它不涉及任何东西,它只是存在,以便密钥不重复,因此重叠两个对象。
在我的应用程序中,我可以选择SimpleDB或DynamoDB,所以这里有两个选项:
-
使用SimpleDB,用格式存储键,但不使用任何引用的格式,而是使用SimpleDB存储的属性。因此,我存储键的属性,如用户名,类型和其他可能我也必须包括在键格式。如果我想从用户'Rohan'获取帐户对象。我只是使用SimpleDB Select来查询属性"用户名"和属性"类型"。(我匹配'account')
-
DynamoDB,存储键和每个键将具有图示格式。我扫描整个数据库,返回每一个键。然后获得密钥并利用密钥格式,我可以使用
-rangeOfString
匹配我想要的,然后从S3下载。
此外,SimpleDB显然是地理上分布的,我如何启用它呢?
那么哪个更快更可靠?使用SimpleDB查询带有属性的键。或者使用DynamoDB存储所有密钥,扫描(下载所有密钥)并使用-rangeOfString
进行匹配?请注意,这些只是指向S3对象的短键。
这是我的最后一个问题,数据库中的对象数量将根据确定的答案而变化,我应该:
- 为用户拥有的每个对象创建一个单独的key/object
- 创建一个帐户密钥/对象并将所有信息存储在其中
显然,这两种选择有不同的优缺点。例如,如果所有数据都是分开的,检索起来会更快,但它也更有组织,更小的数据集存储在一个用户帐户中。
你觉得怎么样?
谢谢你的帮助!我已经悬赏了,真的需要尽快得到答案。
哇!真是个问题!)
好的,让我们讨论一些方面:
<标题> S3 h1> 3性能很低,很可能是因为您没有为列表键添加前缀。如果您通过存储像:type/owner/id
这样的对象来进行分片,那么列出给定所有者的所有id(前缀为type/owner/)将很快。或者至少比一次列出所有内容要快。
Dynamo vs SimpleDB
总的来说,这就是我的建议:
使用SimpleDB时:
- 你的实体存储不会超过10GB
- 你需要应用涉及多个字段的复杂查询
- 你的查询没有定义好
- 你可以利用多值数据类型
使用DynamoDB时:
- 您的实体存储空间将超过10GB
- 你想要扩展需求/吞吐量
- 您的查询和模型定义良好,并且不太可能更改。
- 你的模型是动态的,涉及一个松散的模式
- 您可以在客户端缓存您的查询(因此您可以通过在Dynamo之前查询缓存来节省吞吐量)
- 你想做聚合/汇总汇总,通过使用原子更新
考虑到你目前的描述,似乎SimpleDB实际上更好,因为:-你的模型没有完全定义-你可以推迟一些决策方面,因为需要一段时间才能达到(10GiB)限制
<标题>地理SimpleDB h1> 不支持。它只能在us-east-1上工作。 <标题>键命名h1> 最适用于Dynamo:只要你可以,使用Hash + Range Key。但您也可以使用Hash创建键,并应用一些查询,如:- 列出表T中以
accountid:
开头的所有记录 - 列出表T中以
accountid:image
开头的所有记录
然而,这些都是扫描。请记住这一点
(查看此概述:http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_Scan.html)
<标题>附送的歌曲如果您正在使用Java, Maven Central上的云数据包括SimpleJPA和一些将Blob Fields映射到S3的扩展。所以看看吧:
http://bitbucket.org/ingenieux/cloudy谢谢
标题>标题>标题>标题>