关于python:您如何设计Bigtable / Datastore(GAE)的数据模型?

关于python:您如何设计Bigtable / Datastore(GAE)的数据模型?

How do you design data models for Bigtable/Datastore (GAE)?

由于Google App Engine数据存储区基于Bigtable,并且我们知道它不是关系数据库,因此您如何为使用这种数据库系统的应用程序设计数据库架构/数据模型?


设计bigtable模式是一个开放的过程,基本上需要您考虑:

  • 您将使用的访问模式以及使用频率
  • 您的类型之间的关系
  • 您将需要什么索引
  • 您将使用的写入模式(以有效分散负载)

GAE的数据存储区会自动对您的数据进行规范化处理。也就是说,每个索引都包含(大部分)数据的完整副本,因此每个索引都会显着增加执行写入所花费的时间以及所使用的存储空间。

如果不是这种情况,那么设计数据存储架构将需要做更多的工作:您必须仔细考虑每种类型的主键,并考虑您的决定对数据局部性的影响。例如,在呈现博客文章时,您可能需要显示注释以使其与之一起使用,因此每个注释的关键字可能以关联的文章的关键字开头。

使用Datastore,这没什么大不了的:您使用的查询将看起来像" Select * FROM Comment WHERE post_id = N"。 (如果要分页注释,您还将有一个限制子句,可能的后缀为" AND comment_id> last_comment_id"。)添加此类查询后,数据存储区将为您建立索引,并且您的读取结果将为神奇的快。

需要记住的是,每个额外的索引都会产生一些额外的开销:最好使用尽可能少的访问模式,因为这会减少GAE构造的索引数量,从而减少数据所需的总存储量。

仔细阅读这个答案,我发现它有点模糊。也许动手设计的问题将有助于缩小范围? :-)


您可以使用www.web2py.com。您只需构建模型和应用程序一次,即可在GAE上运行,而且还可以使用SQLite,MySQL,Posgres,Oracle,MSSQL,FireBird


由于GAE建立在Django如何管理数据的基础上,因此在Django文档中有很多有关如何解决类似问题的信息(例如,请参见此处,向下滚动到"您的第一个模型")。

简而言之,您将db模型设计为常规对象模型,并让GAE整理出所有对象关系映射。


推荐阅读