问题标签 [app-engine-ndb]

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 投票
2 回答
881 浏览

google-app-engine - How to structure movies database and user choices?

I would like to create movies database, where user will be able to mark movies he/she watched and liked:

Will that work? I use Google accounts. How should I choose later all movies user liked?


Upd. I've followed systempuntoout approach and use the following code to save user choices:

But if user makes his choice several times, then several records are added to the datastore... Wouldn't be it better just to save user id and movie id as keyname?

However, with such approach if I don't pass liked, then it overwrites its value with None (the same with watched, if not passed, None is used).

0 投票
3 回答
4236 浏览

google-app-engine - Google App Engine Datastore 中最有效的一对多关系?

对不起,如果这个问题太简单了;我才上九年级。

我正在尝试了解 NoSQL 数据库设计。我想设计一个谷歌数据存储模型,最大限度地减少读/写次数。

这是一个玩具示例,用于一对多关系中的博客文章和评论。哪个更有效 - 将所有评论存储在 StructuredProperty 中或在 Comment 模型中使用 KeyProperty?

同样,目标是尽量减少对数据存储的读/写次数。您可以做出以下假设:

  • 评论将不会独立于其各自的博客文章而被检索。(我怀疑这使得 StructuredProperty 最可取。)
  • 评论需要按日期、评级、作者等进行排序。(无法索引数据存储中的子属性,所以这可能会影响性能?)
  • 博客文章和评论都可以在创建后进行编辑(甚至删除)。

使用结构化属性:

使用 KeyProperty:

随意提出与有效表示一对多关系有关的任何其他注意事项,以最大限度地减少对数据存储的读/写次数。

谢谢。

0 投票
1 回答
1539 浏览

python - 我正在尝试在 ndb 中使用带有 filter() 的 @classmethod 并收到错误。新开发银行新手

我有一个具有此类方法的自定义用户模型。:

我收到了这个错误:

这是我第一次使用 NDB,代码与 db 和 all() 一起使用。所以我知道这是一个简单的修复。

提前致谢。

0 投票
1 回答
890 浏览

google-app-engine - 是否可以更改实体的命名空间(NDB)

我想知道这是否是在数据存储中实现“垃圾桶”的一种简单方法。


抱歉,我的想法是,如果更改实体的命名空间很容易,那么您可以拥有一个命名空间,例如“deleted”,它将隐藏主命名空间中的实体,但让它们易于恢复。我在文档中找不到任何东西,但我想我会把问题放在那里以防万一..

0 投票
2 回答
1763 浏览

google-app-engine - 如何从数据存储中获取最新和相邻的记录?

我有电影数据存储,那里的每条记录都有自己的 id 作为键名,如下所示:

我想允许用户一一浏览电影。首先,应该显示最新的电影(数据库有added日期和时间字段)。如何从数据存储中获取它? 更新。我可以这样做:

但我不喜欢它——为了得到钥匙,我要求整张唱片。

其次,如果显示了其他电影(例如,12154),用户应该能够转到上一部电影(id 32453)和下一部电影(id 78873)。当然,如果放映了上一部电影,就没有下一部电影了;如果播放第一部电影,则不会有上一部电影。那么,问题是如何获取下一部电影和上一部电影的关键名称? 更新。如果当前显示的电影是 12154,那么我应该example.com/movie/32453为上一部电影和example.com/movie/78873下一部电影生成链接。

更新。我尝试过如下方法:

但是效果不好……next_url似乎还可以,但prev_url总是一样。这是我的测试数据库内容(-Movies.added顺序):

0 投票
1 回答
3202 浏览

python - 如何在 Python for 循环中获取 GAE ndb 中当前记录的密钥?

我目前有一个网页,其中显示来自数据存储区的记录列表以及编辑链接。我想从 db 转换它。到ndb。我是 Python 和 GAE 新手。

当前代码=

然后在 .py 方面,我有:

我通过复制别人的代码得到了这些,但它有效。我需要知道代码会是什么样子才能使其与 ndb 一起使用。(我对模型和包含语句没问题,我只需要知道如何在 jinja2 模板中检索密钥以及如何在 post 函数中使用它。

请提供实际代码应该如何使用 ndb。

提前致谢。

0 投票
2 回答
102 浏览

google-app-engine - 如何跟踪新添加的记录到 NDB 数据存储区?

我之前使用过以下代码:

但它不允许我知道电影是否作为新记录添加或现有电影是否已更新。因此,我将代码更改为以下内容:

但看起来它会先得到电影,然后才会更新它。所以 2 个对数据存储的请求而不是 1 个。

还有其他方法可以做到这一点吗?或者,我错了,从性能的角度来看,这两种方法都是一样的?

0 投票
1 回答
199 浏览

google-app-engine - 禁用数据存储写入后,如何启动 Mapreduce 作业?

我正在尝试使用 Mapreduce 库在实时 App Engine 应用程序上进行数据存储架构迁移。

我的映射器使用 DatastoreKeyInputReader。每个映射操作都使用我的旧模式获取旧实体,进行一些数据操作,然后在新模式下写入新实体(使用新种类)。我使用 NDB 以事务方式获取和放置实体,事务选项“force_writes”设置为 True。

由于该应用程序处于活动状态,因此我想在迁移期间阻止所有其他数据存储写入,但映射器的事务性写入除外。不幸的是,虽然在禁用写入的应用程序中将 force_writes 设置为 True 时单个映射操作可以正确运行,但我实际上无法启动 Mapreduce 作业 - 它会触发 CapabilityDisabledError,因为 Mapreduce 库本身并未在其自己的簿记中使用 force_writes的职位。

一个明显的技巧可能是在启用写入的情况下启动作业,然后在作业开始后快速禁用它们。但是,这对我来说似乎很冒险,尤其是因为我的应用程序在正常情况下每秒会进行多次写入。另外,一旦作业结束,它可能会中断,除非及时重新启用写入以进行清理。

那么,当我还需要禁用数据存储写入时,如何启动 Mapreduce 作业?似乎最干净的事情是 mapreduce.yaml 支持作业的 force_writes 选项......

0 投票
2 回答
1517 浏览

google-app-engine - NDB 成员资格查询(“IN”操作)性能是否会因许多可能的值而降低?

查询操作 的文档IN指出,这些查询是作为大 OR'ed 相等查询实现的:

相当于:

我目前正在为 GAE 项目建模一些实体,并计划使用这些具有许多可能值的成员查询:

wherelist_of_facebook_ids可以有成千上万的项目。

这种类型的查询会在列表中有数千个可能值时表现良好吗?如果不是,那么推荐的建模方法是什么?

0 投票
2 回答
1001 浏览

google-app-engine - 有没有办法为 ndb.get_multi() 指定投影?

使用 NDB,可以为查询指定投影,允许限制为匹配查询的实体检索的属性数量。

但是,我在文档中找不到关于如何在 using 时指定投影的任何内容ndb.get_multi(),它总是获取完整的实体。

有没有办法在使用时只获取某些属性ndb.get_multi()