由于Google App Engine数据存储区基于Bigtable,我们知道这不是关系数据库,因此如何为使用此类数据库系统的应用程序设计数据库架构/数据模型?
设计一个bigtable架构是一个开放的过程,基本上需要你考虑:
您将使用的访问模式以及每个访问模式的使用频率
你的类型之间的关系
你需要什么指数
您将使用的写入模式(为了有效地分散负载)
GAE的数据存储区会自动对您的数据进行非规范化.也就是说,每个索引都包含(大部分)完整的数据副本,因此每个索引都会显着增加执行写入所花费的时间和使用的存储空间.
如果不是这种情况,那么设计数据存储模式将会有更多工作:您必须仔细考虑每种类型的主键,并考虑您的决策对数据位置的影响.例如,在渲染博客文章时,您可能需要显示与其一起发布的评论,因此每条评论的密钥可能都以相关帖子的密钥开头.
使用数据存储区,这不是什么大问题:您使用的查询看起来像"Select*FROM Comment WHERE post_id = N".(如果你想分页评论,你也会有一个限制子句,可能的后缀为"AND comment_id> last_comment_id".)一旦你添加了这样的查询,数据存储区将为你构建索引,你的读取将是神奇地快.
需要记住的是,每个额外的索引都会产生一些额外的成本:最好是尽可能少地使用访问模式,因为它会减少GAE构建的索引数量,从而减少数据所需的总存储量.
阅读这个答案,我发现它有点模糊.也许一个动手的设计问题有助于缩小范围?:-)