擅长:python、mysql、java
<p>设计bigtable模式是一个开放的过程,基本上需要考虑:</p>
<ul>
<li>您将使用的访问模式以及每种模式的使用频率</li>
<li>你的类型之间的关系</li>
<li>你需要什么指数</li>
<li>您将使用的写入模式(为了有效地分散负载)</li>
</ul>
<p>GAE的数据存储会自动对数据进行非规范化。也就是说,每个索引都包含(大部分)数据的完整副本,因此每个索引都会显著增加执行写操作所需的时间和使用的存储空间。</p>
<p>如果不是这样,那么设计一个数据存储模式将需要做更多的工作:您必须仔细考虑每种类型的主键,并考虑您的决策对数据本地性的影响。例如,当呈现一篇博客文章时,您可能需要显示评论以与之一起,因此每个评论的键可能都以相关文章的键开始。</p>
<p>对于数据存储,这并不是什么大问题:您使用的查询将类似于“Select*FROM Comment WHERE post_id=N.”(如果您要对注释进行分页,您还将拥有一个limit子句,以及一个可能的后缀“and Comment_id>;last_Comment_id”。)一旦添加了这样的查询,数据存储将为您构建索引,你的阅读速度会很快。</p>
<p>需要记住的是,每个额外的索引都会产生一些额外的成本:最好尽可能少地使用访问模式,因为这样可以减少GAE将要构造的索引数量,从而减少数据所需的总存储空间。</p>
<p>仔细阅读这个答案,我觉得有点含糊。也许一个实际的设计问题可以帮助我们缩小范围?:-)</p>