use*_*495 6 google-app-engine google-cloud-datastore
经过几天的阅读应用程序引擎和数据存储的文档后,我似乎无法理解如何构建一个真实的可伸缩应用程序.
我也找不到最佳实践的好例子.确定我可以使我的应用程序工作,但我不知道是否有利于扩展到我的开发环境可以提供的负载以上.
它清楚地说明了使用数据存储区的应用程序引擎教程:"但是,您可以写入同一实体组的速率限制为每秒写入实体组一次.当您设计一个真实的应用程序时,你'我需要记住这个事实."
假设我理解的内容(请纠正我,如果我错了),假设数据存储根是/ then/Users/*(Keys)是实体组而/ Products/Beauty/*是受实体组影响的实体组之前的限制为每秒1次写入.(是/产品/美容/*受限于/ Products/*以及?)
我错过了解这个吗?
让我们假设我们想要构建一个真实的聊天应用程序或购物应用程序.这些应用程序必须存储用户将在应用程序上执行的许多操作的数据.比如发送消息或评论产品或删除/添加/编辑产品.
鉴于这些操作,数据存储应该如何?当然,我们无法将消息存储为/ Messages/{Message,To,From,Timestamp},因为许多用户将发送必须写入此密钥的消息.另一种方法是每秒限制用户每1条消息并将其存储在他的配置文件/ Users/{USER}/{Message,To,From,Timestamp}中,但只有一个用户可以写入该实体组.所以我们可以把它们放在根目录上:/ {USER}/{Message,To,From,Timestamp}但是它被认为是一个好习惯吗?是否足够快速查询数据存储区以获取用户之间的所有消息?(有效吗?可能吗?)
另一种方法是将所有内容存储在数据存储区的根目录中,作为"消息"和"用户","产品"和"类别"(例如,产品中将包含类别引用).
我找到了这些代码示例,但我没有工具或想法如何知道这些是否是规模的任何良好实践?
谢谢!
你在考虑错了.您的密钥路径不是/ Users/*(密钥)
但是一组('User',somekey)键,在这种情况下的用户是Kind(表示实体类型).在这种情况下,每条记录都是它自己的实体组的根.
你只会保持深度密钥链(祖先),你对所拥有的关系有非常严格的要求.
我有一个超过2000个用户的应用程序.和课程材料.每个用户都是拥有它的自己的实体组;自己的结果,对课程材料的关键参考培训实体拥有的每个课程都在同一个实体组中(不需要高写率),我们认为没有理由为什么不会扩展到数百万用户.当我们从100到2000用户时,性能已经很好.
通常,仅当您需要单个组中的实体的事务和/或强一致性时才使用实体组.并且数据存储区没有给出"根".
我们以照片应用为例.添加新用户时,每个用户实体都会成为自己的"实体组",因为它没有(也不需要)父实体.这意味着您可以根据需要每秒添加任意数量的用户.
添加新相册时,您可以将其设置为用户实体的子实体,也可以在不指定父实体的情况下添加它,只需在其中一个属性中引用用户即可.如果您决定在用户和相册之间使用父子关系,则每个用户每秒只能添加一个相册.在现实生活中,用户无法快速添加相册.
App Engine以可扩展性为主要特色.开始构建您的应用程序,或者学习其中一个教程/示例应用程序,其中许多数据建模概念将变得清晰.
| 归档时间: |
|
| 查看次数: |
1822 次 |
| 最近记录: |