- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个分布式会计系统。就数据库结构和要求而言,将应用程序描述为类似 Twitter 的应用程序可能是最简单的,但具有 14 个表的分层数据库结构。使用该应用的公司可能有 1 个或更多用户,所有用户都共享公司信息。
目前,每个实体代表一种记录类型,即客户、发票等。所有实体都有一个父实体,即应用程序的用户。 (出于 HRD 查询一致性原因)
对数据库的每个查询都包含 14 个 AppEngine 查询。每 table 一个。该查询涉及属性过滤。
一个新的要求是,用户的查询可能需要基于其他每个用户的不同属性值。这意味着我们需要(14 x 公司用户数量)AppEngine 查询。这似乎太过分了。
可以按属性过滤的 Kindless Ancestor 查询真的很好,可惜,没有:)
我的选择是:
将实体种类设置为用户。没有 parent 。这意味着所有记录类型都是混合的。 (过滤的字段存在于所有记录类型中)。这不太漂亮。但你会考虑这一点吗?
具有固定的实体类型,并且仅通过过滤器进行查询。结果相当于 Kindless Ancestor 查询。但是,我担心多用户使用时会很慢。
一些数字:我们计划覆盖 10,000 家公司,平均每家公司有 5 个用户,每种记录类型有 1 到 500 万条记录。 (总共 x 14)
感谢您到目前为止的耐心等待..:)
最佳答案
老实说,我发现很难理解您的描述,所以这可能是错误的。查看您现有的代码可能会有所帮助。但我知道您想要一种有效的替代方法来替代有属性的无种类祖先查询,所以让我们从这里开始。
考虑对数据模型进行反规范化以包含仅用于查询的元实体:
class User(db.Model):
pass
class OwnedObject(db.Expando):
object_key = db.StringProperty()
class Customer(db.Model):
name = db.StringProperty()
created_on = db.DateProperty()
class Invoice(db.Model):
amount = db.IntegerProperty()
created_on = db.DateProperty()
# on write
customer = Customer()
customer.name = name
customer.created_on = date.today()
customer.put()
user = User(key_name=users.get_current_user().user_id())
owned_object = OwnedObject(parent=user)
owned_object.object_key = customer.key()
owned_object.created_on = customer.created_on
owned_object.put()
# on read
query = OwnedObject.all()
query.ancestor(user)
query.filter('created_on =', date.today())
entities = db.get([x.object_key for x in query])
因此,您在写入方面要做更多的工作,而在读取方面要做的工作较少。
每个真实实体都与一个 OwnedObject 实体耦合,该实体从适当的祖先派生并指向真实实体的键。 OwnedObject 是一个扩展,因此您将急切地分配要查询的任何属性(在本例中为created_on)。
读取时,您可以查询已复制到 Expando 元实体的任何属性,并且可以以一次查询和一批获取的固定开销拉回用户的所有对象。
编辑:您可以使用PolyModel在没有元实体的情况下完成类似的操作。 .
关于java - 需要 AppEngine 数据存储区设计建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7595813/
我正在尝试将gradle appengine plugin与我的项目一起使用,但SDK的软件包未得到解决。 我在网上看到很多Maven资料库的引用资料:com.google.appengine:app
我对 gradle 概念很陌生。我正在为应用程序引擎做 gradle (我不知道 maven 或 ant),我经历了 [https://cloud.google.com/appengine/docs/
我使用 maven 3.3.9 使用命令 mvn archetype:generate 创建了一个项目,然后搜索端点 archtype 并选择它,然后插入 groupid artifectId 版本.
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: How to implement “autoincrement” on Google AppEngine 我在 Ap
对于我的小框架 Pyxer我希望也能够在 AppEngine 项目之外使用 Google AppEngine 数据存储,因为我现在已经习惯了这种 ORM 模式,对于一些快速的破解来说,这很好。由于文件
我正在尝试 GAE Java 灵活环境并在我的构建脚本中使用“com.google.appengine:gradle-appengine-plugin:gradle-appengine-plugin”
我是 GAE 的大菜鸟,Python 水平中等,Java 中等至生疏。我希望将现有的可用 GAE Java 应用程序(在 Google Play 商店中并在 Android 上运行)转换为 GAE P
我的 AppEngine Java8 应用程序缺少 appengine-api-1.0-sdk-1.9.77.jar。无论我调用什么 servlet,我都会收到此错误 java.lang.NoClas
我正在尝试在请求中获取地区和国家。我认为可以在对 AppEngine 的每个请求中获取 X-AppEngine-Region 和 X-AppEngine-Country header ,但它们丢失了。
我们正在从非官方的“kidleit”maven 插件切换为使用官方的“appengine-maven-plugin”http://code.google.com/p/appengine-maven-p
我正在构建一个 Maven 应用程序,我想将其部署在 Java 的 Google 应用程序引擎上。 我尝试在本地服务器中进行测试 localhost:8080 当我运行命令mvn clean pack
如何在 AppEngine 中使用 X-AppEngine-Estimated-CPM-US-Dollars header 。我读了一些文档,我们可以只使用管理员凭据来使用它,这是什么意思? 如果您有
当我尝试使用 appengine-maven-plugin 更新 appengine-application 时出现以下错误: 400 Bad Request Error when loading a
当我尝试在 AppEngine 中使用低级 DataStore API 时,我收到了一个有趣的 ClassNotFoundException。此异常发生在云服务器中,而不是本地实例中。我在本地使用 a
我在尝试运行我的应用程序时遇到以下错误 from oauth2client.appengine import oauth2decorator_from_clientsecrets ImportErro
情况 我正在使用 AppEngine Cloud Endpoints (Java)作为我的 Android 应用程序的后端服务器。在 Cron-Job 中,服务器定期下载新数据(字符串),过滤掉相关信
我有一个多模块 Maven java 项目。在父 pom 中: core batch-worker be scheduler migrations migr
我们正在尝试从 oauth2client 导入 AppAssertionCredentials。我们正在使用 python27 标准谷歌应用程序引擎。 我们的appengine_config.py如下
有什么区别mvn appengine:更新和Google App Engine 中的 mvn appengine:deploy。 最佳答案 这取决于您为项目使用的配置。 old AppEngine p
从语义上讲,api 和ext 指的是什么意思?例如,为什么 taskqueue 属于 api 而 db 属于 ext? 最佳答案 API = 应用程序编程接口(interface)。 所以我们通过它的
我是一名优秀的程序员,十分优秀!