【发布时间】:2010-09-09 22:34:03
【问题描述】:
由于 Google App Engine 数据存储区基于 Bigtable,而且我们知道这不是关系数据库,您如何设计数据库架构/数据模型 适用于使用此类数据库系统的应用程序?
【问题讨论】:
-
见this question,它或多或少地问同样的事情。
标签: python database google-app-engine bigtable
由于 Google App Engine 数据存储区基于 Bigtable,而且我们知道这不是关系数据库,您如何设计数据库架构/数据模型 适用于使用此类数据库系统的应用程序?
【问题讨论】:
标签: python database google-app-engine bigtable
设计一个大表模式是一个开放的过程,基本上需要你思考:
GAE 的数据存储会自动对您的数据进行非规范化处理。也就是说,每个索引都包含(大部分)完整的数据副本,因此每个索引都会显着增加执行写入所需的时间和使用的存储空间。
如果不是这种情况,设计 Datastore 架构的工作量会大很多:您必须仔细考虑每种类型的主键,并考虑您的决定对数据位置的影响。例如,在呈现博客文章时,您可能需要显示 cmets 以配合它,因此每个评论的键可能以相关文章的键开头。
使用 Datastore,这没什么大不了的:您使用的查询将类似于“Select * FROM Comment WHERE post_id = N”。 (如果您想对 cmets 进行分页,您还需要一个限制子句,以及可能的“AND comment_id > last_comment_id”后缀。)添加此类查询后,Datastore 将为您构建索引,您的读取将是神奇的快。
需要记住的是,每个额外的索引都会产生一些额外的成本:最好使用尽可能少的访问模式,因为它会减少 GAE 将构建的索引数量,从而减少所需的总存储空间根据您的数据。
阅读这个答案,我觉得它有点含糊。也许一个动手设计问题将有助于缩小范围? :-)
【讨论】:
您可以使用 www.web2py.com。您构建模型和应用程序一次,它可以在 GAE 上运行,也可以在 SQLite、MySQL、Posgres、Oracle、MSSQL、FireBird 上运行
【讨论】:
由于 GAE 建立在 Django 中如何管理数据的基础上,因此 Django 文档中有很多关于如何解决类似问题的信息(例如,请参阅 here,向下滚动到“您的第一个模型”)。
简而言之,您将 db 模型设计为常规对象模型,并让 GAE 整理所有对象-关系映射。
【讨论】: