问题标签 [google-cloud-datastore]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1485 浏览

python - App Engine:13 个 StringPropertys 与 1 个 StringListProperty(wrt 索引/存储和查询性能)

先介绍一下背景知识:GeoModel是我编写的一个库,它为 App Engine 应用程序添加了非常基本的地理空间索引和查询功能。它与地理散列的方法相似。GeoModel 中的等效位置哈希称为“geocell”。

目前,GeoModel 库为每个位置感知实体添加了 13 个属性 (location_geocell__n_, n =1..13)。例如,实体可以具有以下属性值:

这是必需的,以便在空间查询期间不使用不等式过滤器。

13 属性方法的问题在于,对于应用程序想要运行的任何地理查询,必须定义和构建 13 个新索引。这绝对是一个维护麻烦,因为我刚刚在为项目重写演示应用程序时痛苦地意识到。这引出了我的第一个问题:

问题 1:每个索引是否有任何显着的存储开销?即,如果我有 13 个索引,每个索引有 n 个实体,而 1 个索引有 13n 个实体,那么前者在存储方面是否比后者差得多?

根据这篇文章,似乎 (1) 的答案是否定的,但我只是想看看是否有人有不同的经历。

现在,我正在考虑调整 GeoModel 库,以便只有一个名为 location_geocells 的 StringListProperty 而不是 13 个字符串属性,即:

这导致更清洁index.yaml。但是,我确实质疑性能影响:

QUESTION 2:如果我从 13 个字符串属性切换到 1 个 StringListProperty,查询性能是否会受到不利影响;我当前的过滤器看起来像:

新的过滤器看起来像:

请注意,第一个查询具有 _n_ 个实体的搜索空间,而第二个查询具有 _13n_ 个实体的搜索空间。

似乎 (2) 的答案是,根据这篇博文中的提示 #6,两者都会产生相同的查询性能,但我想再次看看是否有人对此有任何不同的实际经验。

最后,如果有人有任何其他建议或技巧可以帮助提高存储利用率、查询性能和/或易用性(特别是 wrt index.yaml),请告诉我!源代码可以在这里找到geomodel & geomodel.py

0 投票
1 回答
301 浏览

python - 查询奇怪的行为。Google App Engine 数据存储

我有一个这样的模型:

有时在执行以下查询时:

或者

我收到这样的错误消息:

但是当我使用具有相同含义的 GQL 查询时,一切正常。

为什么会这样?我不明白为什么 GAE 认为“全部”是属性?


更新:哎呀......我发现我也有与模型命名相同的请求处理程序;(

0 投票
7 回答
7303 浏览

google-app-engine - 是否有任何工具可以备份/恢复 Google Datastore 实体?

我已经使用 Google App Engine 和 Google Datastore 玩了一段时间了,我面临着需要定期将我的东西备份到云端。

是否有任何通用工具可让您从 google-datastore 的特定实例下载所有数据并将其还原到另一个实例?

如果是这样,请赐教,如果不是 - 有人应该这样做!

0 投票
3 回答
655 浏览

python - 如何在 Google App Engine 数据存储中存储正则表达式?

正则表达式通常表示为字符串,但它们也有属性(即单行、多行、忽略大小写)。你会如何储存它们?而对于编译好的正则表达式,如何存储呢?

请注意,我们可以编写自定义属性类:http: //googleappengine.blogspot.com/2009/07/writing-custom-property-classes.html

由于我对 Python 的了解不够,我第一次尝试编写存储已编译正则表达式的自定义属性失败。

0 投票
2 回答
926 浏览

python - 为 Google 应用引擎创建 Google 用户的替代登录

如何在不使用 Google 用户的情况下处理登录和注销/创建用户?我想要更多的选项,而不是电子邮件和密码。这只是用我需要的字段制作用户模型的情况吗?这足够安全吗?

或者,有没有办法让用户使用 Google ID 登录,但不会被重定向到实际的 Google 页面?

0 投票
2 回答
948 浏览

python - 是否可以通过对象的字典更新 Google App Engine 数据存储中的条目?

我尝试了以下代码,但没有成功:

我发布了所有必要的属性,但条目没有更新,也没有显示错误。如何解决?

顺便提一句

0 投票
1 回答
2060 浏览

python - 如何在 Google App Engine 中检查 UserProperty 的空值

在Google App Engine,数据存储建模中,我想问一下如何检查具有类UserProperty的属性的空值?例如:我有这个代码:

当我想检查那些编辑器不为空的条目时,我不能使用这种 GqlQuery

我想知道是否有任何方法可以使用 UserProperty 检查变量是否存在?谢谢!

0 投票
2 回答
3033 浏览

java - Java App Engine Datastore:如何查询对象继承类的字段?

应用引擎 1.2.2。我像这样定义一个类 Product:

我像这样定义派生类 Book:

然后我像这样制作一个新对象:

PersistenceManager pm = PMF.get().getPersistenceManager(); pm.makePersistent(new Book("乔治奥威尔", "1984"));

我可以使用如下查询来查询这个新对象:

查询 query = pm.newQuery("select from " + Book.class.getName() + " where author == param"); query.declareParameters("字符串参数"); List results = (List) query.execute("George Orwell");

这将返回对象,因为我正在查询 Book 上定义的字段“作者”。

然而这不起作用:

查询 query = pm.newQuery("select from " + Book.class.getName() + " where title == param"); query.declareParameters("字符串参数"); 列表结果 = (List) query.execute("1984");

它抛出一个异常,指出没有字段“标题”,即使这是在派生类 Product 上定义的。

似乎继承类中的字段在数据存储区查询中不可用。

这实际上可以通过语法的变化或注释来实现吗?

0 投票
1 回答
1231 浏览

python - 从 App Engine 数据存储到 JSON 的分层数据输出?

我在 App Engine 数据存储区中有一个大型分层数据集。通过将数据存储在实体组中来保留层次结构,这样我就可以通过简单地知道顶部元素键来拉整棵树,如下所示:

query = db.Query().ancestor(db.get(key))

问题:我现在如何将此数据输出为 JSON 并保留层次结构?

Google 有一个名为 GqlEncoder 的实用程序类,它为 simplejson 添加了对数据存储查询结果的支持,但它基本上将数据扁平化,破坏了层次结构。

有什么建议么?

0 投票
2 回答
238 浏览

google-app-engine - 无法修改 App Engine 实体,管理控制台除外

我的 App Engine 数据存储区遇到了一个严重问题,它似乎完全不受调试的影响:我无法在构建实体后对其进行修改。

从 app.yaml 中定义的控制台工作时甚至会出现问题,该控制台不与我的主应用程序共享任何代码。这是控制台中的一个示例:

这种相同的行为会影响应用程序中的所有实体类型和所有属性。实体是否已保存无关紧要。

我尝试从几天、几周和几个月前恢复到转速,但问题仍然存在,尽管如果它实际上是在几周和几个月前,我肯定会注意到它,因为它破坏了应用程序逻辑。它存在于运行 Ubuntu 和 OSX 的不同机器上,它也存在于生产中的所有应用程序版本中,并且它存在于我测试过的至少一个其他应用程序中。在擦除我的 SDK 数据存储、使用不同的端口、刷新我的内存缓存和任务队列、重新安装 SDK 以及我在绝望中能想到的所有其他调试技巧之后,它仍然存在。

一个不受影响的地方是管理控制台。相同的代码序列得到修改实体的预期结果。即使在我导入了我能想到的每个模块或类之后,这可能会造成麻烦,控制台仍然总是按预期工作。另一个迹象表明我的代码中没有任何东西导致这个问题(而且我不会完全发疯)。

我相当肯定,就在几天前,我可以在我的应用程序中修改实体,就像在管理控制台中一样。毕竟,不可变实体不是很有用。

一些建议将非常非常感谢。我担心这个问题会阻止我继续开发,直到我能解决它。