【发布时间】:2012-02-28 17:16:53
【问题描述】:
我的 Web 应用程序将有大约 150 个字段,当任何字段(至少一个)中的值发生更改时,我应该保存更改的值。 我应该如何使用 GAE 存储这些值?我应该将它们直接保存在数据存储中吗?我应该暂时使用 memcache,然后将所有值一次保存在数据存储中吗?或者,应该遵循其他方法?
【问题讨论】:
标签: python google-app-engine memcached google-cloud-datastore
我的 Web 应用程序将有大约 150 个字段,当任何字段(至少一个)中的值发生更改时,我应该保存更改的值。 我应该如何使用 GAE 存储这些值?我应该将它们直接保存在数据存储中吗?我应该暂时使用 memcache,然后将所有值一次保存在数据存储中吗?或者,应该遵循其他方法?
【问题讨论】:
标签: python google-app-engine memcached google-cloud-datastore
数据存储是您的数据库。 Memcache 用于存储从数据存储中获取并临时保存在内存中的数据,以避免对数据库的过多调用。您应该首先围绕数据存储设计您的应用,然后使用 memcache 来提高性能。
根据您选择的编程语言(java、python、go),有许多工具可以帮助您将应用中的对象映射到数据存储区并有效地使用 memcache。
【讨论】:
首先,您应该了解您将如何使用您的数据。您打算进行哪些查询?您的实体有多大?
Datastore 与关系数据库非常不同。那就是改变多少属性并不重要,因为没有办法自己更新属性。您只能将实体保存为一个整体。我不了解您的用例,但可能应该有一种更好的方法来构建数据,而不是为单个实体拥有约 150 个属性。你的用例是什么?
实体的属性过多可能会导致索引爆炸,或减慢数据存储写入速度。
【讨论】:
我建议您将实体拆分为一个根实体和几个链接的实体,每个实体分别保存 150 个属性中的一些属性 - 这样,当您更新一个属性时,您只需要保存一个(或两个,如果更新反映在根实体上)数据存储区中的较小实体,而不是大型实体。
使用 memcache 来防止读取,而不是存储要进入数据存储区的数据。 Memcache 可以被刷新,其中的数据可以在永久存储之前被销毁。
更进一步,属性的分组可以反映一起更新的数据 - 例如,如果您总是一起更新 street 和 zipcode,则保留它们是有意义的在一个单一的结构中。
【讨论】: