问题标签 [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.
python - 原始数据存储客户端中的 StructuredProperty 或类似属性
我有一个 GroupWallet 模型,我想在其中存储几个人有多少钱。该信息包括人员、人员密钥和金额。所以你可以说我想保存一个元组列表
我试过有一个关系对象(在 GroupWallet 和 Person 之间),但扩展性不是很好。
我一直在考虑拥有三个并行列表,例如Names
, NameKeys
,Amount
并使用索引将元组链接在一起。但我不喜欢那个解决方案,并跑过NDB和 StructuredProperty,他们以一种很好的方式做到了这一点!但我还需要 NDB 中不存在的 PolyModel,仅在原始 db 库中。
所以我的问题是;有人知道独立的 StructuredProperty 实现或知道 PolyModel 是否会很快在 NDB 中实现?
google-app-engine - 如何在expando模型之间进行引用?
更新
这是我创建以下方案的最大努力
原始问题
如何使用 expando 类进行自我引用以指示哪个用户是哪个用户的“赞助商”?“赞助商”是邀请新用户的人,因此在创建时我们必须存储它,并且将其存储为引用属性比字符串或字符串列表要简洁得多。
我可以创建一个新用户,但我不知道如何进行引用,以便我可以告诉一个用户谁是另一个用户谁是第一个用户的赞助商,我想一种建模方法是使用 selfreferenceproperty 因为两者对象是用户,但复杂之处在于它是一个扩展模型,所以我不知道如何使用引用属性。你能告诉我怎么做或给我一个线索,我怎样才能以最好的方式解决这个问题?
我不知道如何做最后一部分,用 epando 模型存储实际的参考属性。如何做呢?
更新
似乎无法做到:
NotImplementedError: Property sponsor does not support <class 'google.appengine.ext.db.ReferenceProperty'> types.
代码:
它迫使我使用字符串而不是引用,然后解决方案是可行的:
database - Appengine 的 NDB 中的 context.map_query 和 qry.map_async 有什么区别?
该文档似乎表明它们可以类似地使用。有什么区别,什么时候应该使用?应该使用哪个以获得最佳性能(因为两者都表明它们是“最快的”)。
context.map_query 的文档:https ://docs.google.com/document/d/1rPyB2RmRERAZDPpqy2cxzXeDGyfLhX-s-3dFVpnwFXw/edit?hl=en_US#heading=h.wniiq5a4ja4o
qry_obj.map_async 的文档:https ://docs.google.com/document/d/1rPyB2RmRERAZDPpqy2cxzXeDGyfLhX-s-3dFVpnwFXw/edit?hl=en_US#heading=h.t1t6424hbp7y
python - 从 NDB 中的 ComputedProperty 函数返回列表的解决方法
我正在将我的应用程序转换为使用 NDB。我以前也有过这样的事情:
如您所见,我生成列表的方法有点复杂,我更喜欢保持这种方式。但是当我开始转换为 NDB 时,我只是替换@db.ComputedProperty
为,@model.ComputedProperty
但后来我收到了这个错误:
我可以model.py
在 ext.ndb 中看到,它ComputedProperty
继承自GenericProperty
where_db_set_value
有几个 if/else 语句根据其类型处理值,除了没有处理lists
目前它通过第一个条件并在我返回一个空列表时给出该错误。
有没有办法解决这个问题并避免错误?
python - 使用 db.allocate_id_range?
该手册没有示例如何使用 db.allocate_id_range。我尝试了一些代码,但它失败了,尤其是 webapp2:s 用户模型,它是一个 ndb expando 模型。我想要做的只是创建一个具有我选择的 ID 号的用户实体,所以我尝试使用 db.allocate_id_range 但它不起作用:
我尝试这样做的方式是这样的
first_batch = db.allocate_id_range(User, 3001, 3001) #try allocate ID 3001
我做错了吗?我还尝试将模型名称放在引号中,但这也不起作用。我应该怎么做?感谢您的任何建议。
google-app-engine - GAE 存储密钥与 StringID
在 Google App Engine 数据存储中存储密钥而不是字符串是否有优势。
例如:
VS
- 为什么要存储 Key 而不是 StringID?仅仅是为了方便吗?
- 哪个使用更少的存储空间?
- 哪个查询更快?
google-app-engine - ndb.model.Model 的低级数据存储实体?
mapreduce.input_readers.DatastoreEntityInputReader 为一种类型生成低级数据存储实体。可以将该低级数据存储实体转换为基于 ndb.model.Model 的实体吗?
google-app-engine - BadRequestError: app s~myapphr 无法访问 app dev~myapphr 的数据。为什么?
我正在使用来自 Google App Engine 上的 1.6.2 SDK 的 Python 2.7 运行时和 NDB。
我收到以下错误:
BadRequestError: app s~myapphr 无法访问 app dev~myapphr 的数据
源自此代码:
我正在从别名为 myapphr 的 dev.myapp.appspot.com 访问我的应用程序。device_id 是在同一个 dev.myapphr 版本上创建的。
到底是怎么回事?
google-app-engine - 寻找想法/替代方法来提供与 GAE 数据存储查询匹配的项目的页面/项目计数/导航
我喜欢数据存储的简单性、可扩展性和易用性;并且在新的ndb库中发现的增强功能非常棒。
据我了解数据存储最佳实践,当匹配查询的项目数量很大时,不应编写代码来提供匹配查询结果的项目和/或页数;因为这样做的唯一方法是检索资源密集型的所有结果。
但是,在包括我们在内的许多应用程序中,通常希望查看匹配项的计数并为用户提供导航到这些结果的特定页面的能力。数据存储分页问题因需要解决fetch(limit, offset=X)的限制而变得更加复杂,如通过大数据集分页一文中所述. 为了支持推荐的方法,数据必须包含一个唯一值列,该列可以按照结果显示的方式进行排序。此列将为每页结果定义一个起始值;保存它,我们可以有效地获取相应的页面,允许根据请求导航到特定页面或下一页。因此,如果要显示以多种方式排序的结果,可能需要维护几个这样的列。
需要注意的是,从 SDK v1.3.1 开始,查询游标是推荐的数据存储分页方式。它们有一些限制,包括不支持 IN 和 != 过滤器运算符。目前我们的一些重要查询使用IN,但我们将尝试使用OR编写它们以用于查询游标。
遵循建议的指南,可以为用户提供(下一个)和(上一个)导航按钮,以及导航进行时的特定页面按钮。例如,如果用户按(Next) 3 次,应用程序可以显示以下按钮,记住每个按钮的唯一起始记录或光标以保持导航效率:(Prev) (Page-1) (Page-2) (Page -3)(第 4 页)(下一个)。
一些人建议单独跟踪计数,但是当允许用户查询一组丰富的字段以改变返回的结果时,这种方法是不切实际的。
我正在寻找有关这些问题的一般见解,特别是以下问题:
您在数据存储应用程序中提供哪些查询结果导航选项来解决这些限制?
如果为用户提供有效的结果计数和整个查询结果集的页面导航是一个优先事项,那么应该放弃使用数据存储,转而支持现在提供的GAE MySql 解决方案。
大表架构或数据存储实现中是否有任何即将发生的变化,这些变化将为有效计算查询结果提供额外的功能?
非常感谢您的帮助。
python - NDB 异步 API 和 get_or_insert_async
我正在尝试围绕异步 api 进行思考,但没有取得多大成功。
我在我的实验室项目中设置了一个相当简单的设置。我有一个看起来像这样的模型:
还有一个使用 get_or_insert 并检查 reference_list 是否包含键的方法,如果不添加它。实体下方是模型实体,列表是字符串列表 ["abc","def","ghi"]
这按我的意愿工作,但时间很长。如果列表长约 20-30 倍。大约需要15-20秒。
所以我开始研究异步 api。但不要走得太远。现在它不在数据库中存储任何东西:
我不太明白在哪里,主要是因为我不了解 tasklet 和 yield 的概念。任何人有任何想法或可以指出我的方向吗?
编辑:
我最终得到了这个解决方案:
并将@ndb.toplevel 添加到我的获取请求处理程序中。而且速度更快!
我还在https://groups.google.com/forum/?fromgroups#!topic/appengine-ndb-discuss/L4DEsYdEwTE上发布了这个问题,并包含了一些后续问题