由于Google App Engine数据存储是基于Bigtable的,而我们知道它不是关系数据库,那么如何为使用这种数据库系统的应用程序设计数据库schema/data模型呢?
发布于 2008-09-17 06:02:39
设计bigtable模式是一个开放的过程,基本上需要您考虑:
GAE的数据存储会自动解除数据的规格化。也就是说,每个索引包含(大部分)数据的完整副本,因此每个索引显著增加了执行写入所需的时间和使用的存储空间。
如果不是这样,那么设计一个数据存储模式将是一项更多的工作:您必须仔细考虑每种类型的主键,并考虑您的决策对数据局部性的影响。例如,当呈现一篇博客文章时,您可能需要显示相应的评论,因此每个评论的关键字可能会以相关帖子的关键字开头。
对于数据存储,这并不是什么大问题:您使用的查询将类似于"Select * FROM Comment WHERE post_id =N“。(如果您想对注释进行分页,您还应该有一个limit子句和一个可能的后缀“and comment_id >last_comment_id”。)一旦您添加了这样的查询,Datastore将为您构建索引,您的读取速度将变得神奇。
要记住的是,每个额外的索引都会产生一些额外的成本:最好使用尽可能少的访问模式,因为这将减少GAE将构建的索引的数量,从而减少数据所需的总存储空间。
仔细阅读这个答案,我发现它有点含糊。也许一个亲身实践的设计问题会有助于缩小范围?:-)
发布于 2008-10-13 03:49:30
您可以使用www.web2py.com。您只需构建模型和应用程序一次,它就可以在GAE上运行,也可以在SQLite、MySQL、Posgres、Oracle、MSSQL、FireBird上运行。
发布于 2008-09-17 06:01:53
随着GAE构建如何在Django中管理数据,在Django文档中有很多关于如何解决类似问题的信息(例如,请参阅here,向下滚动到“您的第一个模型”)。
简而言之,您将数据库模型设计为常规对象模型,并让GAE对所有对象关系映射进行排序。
https://stackoverflow.com/questions/79850
复制相似问题