【问题标题】:Google App Engine and database "Views"Google App Engine 和数据库“视图”
【发布时间】:2011-06-17 22:34:05
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: google-app-engine views google-cloud-datastore bigtable denormalization


    【解决方案1】:

    视图通常是 RDBMS 功能而不是非相关功能。不过,您所描述的内容听起来像是物化视图,虽然它们是一个有效的解决方案,但它们不是一个常见的解决方案,因此没有任何 App Engine 库(我知道)可以这样做这个。

    更常见的做法是简单地以一种有助于高效读取的方式非规范化存储数据,并在写入时直接更新数据。

    【讨论】:

    • 嗨,尼克,感谢您的回复。当某些数据被更新并在许多其他对象中复制(非规范化)时,在一个实例中通常要做的事情是什么。例如,如果员工的名字被更改,并且他的名字被复制到他多年来一直从事的 1000 多个约会中?
    • @DutrowLLC 在这种特定情况下,我认为不应更改它们,因为那是他在约会时的名字。一般来说,如果您期望相关值发生变化,请不要那样进行非规范化。如果必须,则更新源,并使用任务队列或 mapreduce 类型的进程来更新所有内容。
    • 我想我明白你在说什么。因此,对于一个对象在多个其他位置复制的关系,您可以在写入时将更改复制到一定次数;但是,如果副本数量高于某个阈值,您会使用任务队列吗?但是没有这个库......这不是应用引擎的常见场景吗?
    • @DutrowLLC 不,我会设计它以限制写入的位置数量 - 例如,将计数与被计数的记录分开只需要一次额外的更新 - 或者我会使用批量更新过程以汇总这些更新。但是,您很少需要对可变数量不限的重复项进行非规范化处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2015-07-29
    • 2011-07-03
    • 2016-10-19
    • 1970-01-01
    相关资源
    最近更新 更多