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