2024-04-23 17:19:26 发布
网友
由于Google应用程序引擎数据存储是基于Bigtable的,而且我们知道这不是关系数据库,因此如何为使用这种数据库系统的应用程序设计数据库模式/数据模型?
随着GAE建立在Django中如何管理数据的基础上,有很多关于如何在Django文档中解决类似问题的信息(例如,请参见here,向下滚动到“第一个模型”)。
简而言之,您将db模型设计为一个常规对象模型,并让GAE对所有对象关系映射进行排序。
设计bigtable模式是一个开放的过程,基本上需要考虑:
GAE的数据存储会自动对数据进行非规范化。也就是说,每个索引都包含(大部分)数据的完整副本,因此每个索引都会显著增加执行写操作所需的时间和使用的存储空间。
如果不是这样,那么设计一个数据存储模式将需要做更多的工作:您必须仔细考虑每种类型的主键,并考虑您的决策对数据本地性的影响。例如,当呈现一篇博客文章时,您可能需要显示评论以与之一起,因此每个评论的键可能都以相关文章的键开始。
对于数据存储,这并不是什么大问题:您使用的查询将类似于“Select*FROM Comment WHERE post_id=N.”(如果您要对注释进行分页,您还将拥有一个limit子句,以及一个可能的后缀“and Comment_id>;last_Comment_id”。)一旦添加了这样的查询,数据存储将为您构建索引,你的阅读速度会很快。
需要记住的是,每个额外的索引都会产生一些额外的成本:最好尽可能少地使用访问模式,因为这样可以减少GAE将要构造的索引数量,从而减少数据所需的总存储空间。
仔细阅读这个答案,我觉得有点含糊。也许一个实际的设计问题可以帮助我们缩小范围?:-)
你可以使用www.web2py.com。您只需构建一次模型和应用程序,它就可以在GAE上运行,而且还可以在SQLite、MySQL、Posgres、Oracle、MSSQL、FireBird上运行
随着GAE建立在Django中如何管理数据的基础上,有很多关于如何在Django文档中解决类似问题的信息(例如,请参见here,向下滚动到“第一个模型”)。
简而言之,您将db模型设计为一个常规对象模型,并让GAE对所有对象关系映射进行排序。
设计bigtable模式是一个开放的过程,基本上需要考虑:
GAE的数据存储会自动对数据进行非规范化。也就是说,每个索引都包含(大部分)数据的完整副本,因此每个索引都会显著增加执行写操作所需的时间和使用的存储空间。
如果不是这样,那么设计一个数据存储模式将需要做更多的工作:您必须仔细考虑每种类型的主键,并考虑您的决策对数据本地性的影响。例如,当呈现一篇博客文章时,您可能需要显示评论以与之一起,因此每个评论的键可能都以相关文章的键开始。
对于数据存储,这并不是什么大问题:您使用的查询将类似于“Select*FROM Comment WHERE post_id=N.”(如果您要对注释进行分页,您还将拥有一个limit子句,以及一个可能的后缀“and Comment_id>;last_Comment_id”。)一旦添加了这样的查询,数据存储将为您构建索引,你的阅读速度会很快。
需要记住的是,每个额外的索引都会产生一些额外的成本:最好尽可能少地使用访问模式,因为这样可以减少GAE将要构造的索引数量,从而减少数据所需的总存储空间。
仔细阅读这个答案,我觉得有点含糊。也许一个实际的设计问题可以帮助我们缩小范围?:-)
你可以使用www.web2py.com。您只需构建一次模型和应用程序,它就可以在GAE上运行,而且还可以在SQLite、MySQL、Posgres、Oracle、MSSQL、FireBird上运行
相关问题 更多 >
编程相关推荐