Google app engine 谷歌应用程序引擎和数据库;“意见”;

Google app engine 谷歌应用程序引擎和数据库;“意见”;,google-app-engine,views,google-cloud-datastore,bigtable,denormalization,Google App Engine,Views,Google Cloud Datastore,Bigtable,Denormalization,我正在为GAE开发一个具有相当复杂数据模型的应用程序 根据我的理解,使用noSQL数据库(尤其是GAE)处理复杂数据模型的一个好方法是使用数据的非规范化“视图”。如果浏览器客户端希望更新某些数据,服务器将对某些核心数据执行写入操作,返回“200 OK”,以便客户端可以继续,然后使用任务que更新写入的数据可能影响的任何“视图” 然后,每当客户机想要查询通常需要SQL联接的某些对象时,它都可以查询一个“视图”,其中它所需的所有数据都在同一“行”(或应用程序引擎中的实体)中 我遇到的问题是,所有这些

我正在为GAE开发一个具有相当复杂数据模型的应用程序

根据我的理解,使用noSQL数据库(尤其是GAE)处理复杂数据模型的一个好方法是使用数据的非规范化“视图”。如果浏览器客户端希望更新某些数据,服务器将对某些核心数据执行写入操作,返回“200 OK”,以便客户端可以继续,然后使用任务que更新写入的数据可能影响的任何“视图”

然后,每当客户机想要查询通常需要SQL联接的某些对象时,它都可以查询一个“视图”,其中它所需的所有数据都在同一“行”(或应用程序引擎中的实体)中


我遇到的问题是,所有这些视图的创建和更新似乎都是库应该做的事情,而不是我应该手动做的事情。是否有一个工具可以与GAE一起使用,您可以在其中指定数据的某些视图,然后期望它们能够被适当地创建和处理?我相信CouchDB可以做到这一点…

视图通常是RDBMS特性,而不是非REL特性。不过,您所描述的内容听起来像是物化视图,虽然它们是一个有效的解决方案,但它们不是常见的解决方案,因此没有任何应用程序引擎库(据我所知)可以做到这一点


更常见的方法是以便于高效读取的方式存储非规范化数据,并在写入时直接更新数据。

嘿,尼克,谢谢你的回复。在一个实例中,当一些数据被更新并复制(非规范化)到很多其他对象中时,通常要做什么。例如,如果一名员工的名字被更改,并且他的名字被复制到他多年来参加的1000多个约会中?@DutrowLLC在这种特定情况下,我认为他们不应该更改,因为那是他在约会时的名字。一般来说,如果您希望所讨论的值发生变化,请不要像那样去规范化。如果必须,那么更新源代码,并使用任务队列或mapreduce类型的进程来更新所有内容。我想我明白你的意思了。因此,对于一个对象在多个其他位置复制的关系,您可以在写入时将更改复制到一定次数;但是,如果副本数高于某个阈值,您会使用任务队列吗?但是没有这个图书馆。。。这不是app engine的常见情况吗?@DutrowLLC否,我会将其设计为限制写入位置的数量-例如,将计数与正在计数的记录分开只需要一次额外的更新-或者我会使用批更新过程来聚合这些更新。但是,很少有情况需要对可变为无限多个重复项的内容进行反规范化。