MCK*_*pur 6 database amazon-s3 amazon-web-services amazon-simpledb amazon-dynamodb
我正在制作移动iOS应用.用户可以创建帐户并上传字符串.它会像twitter,你可以关注人物,有个人资料图片等.我无法估计用户群,但如果应用程序起飞,总数据集可能会相当大.
我将实际对象存储在Amazon S3上,并且列出Amazon S3密钥的DataBase上的密钥很慢.那么存储密钥哪个更好?
这是我对SimpleDB和DynamoDB的了解:
SimpleDB的:
DynamoDB:
这些观点对我的理解是正确的,DynamoDB更像是杀手锏.速度和可扩展性,SimpleDB更多的是查询和价格(仍然提供良好的性能).但是如果以这种方式看待它,这会更快,从DynamoDB下载所有密钥,或者使用SimpleDB进行选择查询......对吗?一个是使用超快速数据库下载很多(然后我们必须匹配它们),另一个是使用相当好的性能数据库来查询和下载少数正确的对象.那么,哪个更快:
DynamoDB下载所有内容并匹配OR SimpleDB查询和下载
(注意:匹配只是意味着使用-rangeOfString
和字符串比较,没有耗电或非时间效率或任何服务器端)
我的S3键将为每种类型的对象使用此格式
accountUsername:typeOfObject:randomGeneratedKey
例如,如果您正在引用帐户对象
罗汉:帐号:shd83SHD93028rF
或者个人资料图片:
罗汉:ProfilePic:Nck83S348DD93028rF37849SNDh
我有随机生成的唯一性密钥,它没有引用任何东西,它就是那里,因此密钥不会重复因此重叠两个对象.
在我的应用程序中,我可以选择SimpleDB或DynamoDB,所以这里有两个选项:
使用SimpleDB,使用格式存储密钥但不使用任何引用的格式,而是使用存储在SimpleDB中的属性.所以,我存储了密钥,其中包含用户名,类型等属性以及其他我也必须以密钥格式包含的内容.因此,如果我想从用户'Rohan'获取帐户对象.我只是使用SimpleDB Select来查询属性'username'和属性'type'.(我匹配'帐户')
DynamoDB,存储密钥和每个密钥将具有图示的格式.我扫描整个数据库返回每一个键.然后获取密钥并利用密钥格式,我可以使用它-rangeOfString
来匹配我想要的,然后从S3下载.
此外,SimpleDB显然是在地理上分布的,我怎么能实现这一点呢?
哪个更快更可靠?使用SimpleDB查询具有属性的键.或者使用DynamoDB存储所有密钥,扫描(下载所有密钥)并使用例如匹配-rangeOfString
?请注意,这些只是指向S3对象的短键.
这是我的最后一个问题,数据库中的对象数量因决定的答案而异,我应该:
显然,这两种选择之间会有不同的优缺点.例如,检索它是否全部是分开的更快,但是它也更有条理,并且用于将其存储在一个用户帐户中的数据集也不那么大.
所以你怎么看?
谢谢您的帮助!我已经给了这个赏金,真的需要尽快回答.
哇!这是什么问题 :)
好的,我们来讨论一些方面:
S3性能很低,因为您没有为列表键添加前缀.
如果通过存储以下对象进行分片:type/owner/id
列出给定所有者的所有ID(前缀为类型/所有者/)将很快.或者至少比一次列出所有内容更快.
总的来说,这就是我的建议:
在以下时间使用SimpleDB:
在以下情况下使用DynamoDB:
鉴于您当前的描述,似乎SimpleDB实际上更好,因为: - 您的模型没有完全定义 - 您可以推迟一些决策方面,因为它需要一段时间才能达到(10GiB)限制
它不支持.它仅适用于我们 - 东部 - 1 afaik.
这最适用于Dynamo:只要你可以,使用Hash + Range Key.但您也可以使用Hash创建密钥,并应用一些查询,例如:
accountid:
accountid:image
但是,那些都是扫描.记住这一点.
(有关概述,请参阅此内容:http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_Scan.html)
如果您正在使用Java,Maven Central上的云数据包括SimpleJPA以及Map Blob Fields到S3的一些扩展.所以看看:
http://bitbucket.org/ingenieux/cloudy
谢谢
归档时间: |
|
查看次数: |
1956 次 |
最近记录: |