App Engine 上 Cloud Datastore 的客户端库 - NDB 或 google-cloud-datastore

Posted

技术标签:

【中文标题】App Engine 上 Cloud Datastore 的客户端库 - NDB 或 google-cloud-datastore【英文标题】:Client Library for Cloud Datastore on App Engine - NDB or google-cloud-datastore 【发布时间】:2017-04-13 20:01:39 【问题描述】:

根据 Google 的文档,我似乎有两个使用 Python 连接到 Datastore 的主要选项:App Engine 的 NDB Datastore 库和适用于 Python 的 Google Cloud Datastore API。

我目前使用的是 App Engine(标准版),但我想构建我的应用程序,使其在需要时可以扩展,可能通过迁移到 Compute Engine 来实现。考虑到这一点,我应该使用哪个库?应用引擎的文档指出可以使用 NDB,但它似乎不再被积极开发。在撰写本文时,最后一次提交是在 6 个多月前,尽管它们以前可能是 planning some expansion。一切最终都会改用 Google Cloud Datastore API 吗?如果 NDB 被逐步淘汰,我真的不想对它产生依赖。

我还没有尝试过,但似乎在 App Engine may come with its own issues 中使用完整的 Google Cloud Datastore API。

如果有人在 App Engine - Standard 上使用过 Google Cloud Datastore API,我很乐意听取您的想法。

编辑 - 2016-11-30 - 唯一性

这个问题被标记为类似于this one。虽然有一些相似之处,但我特别提到希望选择一种能够轻松实现 App Engine 之外的增长的解决方案。在这一点上,我假设 NDB 库仅适用于 App Engine,因此如果我超越 App Engine,它将无法工作。但是,我认识到在 App Engine 上使用 NDB 可能仍然有优势,然后在我超越时切换到 Cloud Datastore API。我提出的一些相关的、更具体的问题包括:

NDB 和 Cloud Datastore API 是否足够相似,以至于以后从一个转移到另一个不会有那么大的问题?也许有人已经这样做了,并且可能有意见。 NDB 真正在 App Engine 上大放异彩有什么特别的原因吗?性能? 由于 NDB 使用 Cloud Datastore,我是否应该担心它最终会停止使用?谷歌最近让 App Engine 越来越接近其他云计算阵容,而 NDB 存储库最近没有看到很多更新这一事实让我感到担忧。 Google 确实会不时中断。

谢谢。

【问题讨论】:

what's the difference between google.appengine.ext.ndb and gcloud.datastore?的可能重复 我个人的经验是NDB具备你需要的所有功能,而且非常成熟。我还使用 CGD Api 仅用于访问其他应用程序数据存储,并且我发现该库太“低级”......你失去了所有 ndb.Model 类功能,类中定义的实体“模式”等。如果你进行查询,您将获取存储在 Datastore 中的信息的原始数据,并且您必须手动提取属性、进行转换(即从 Pickle 到 JSON)等。 【参考方案1】:

在阅读更多内容后,我将继续回答我自己的问题,希望对其他人有所帮助。

完整阅读discussion on google-cloud-python后,我的许多问题都可以在一定程度上得到回答。

首先,开发人员对该项目的看法似乎是Google Cloud Datastore API should work on App Engine,但性能将是worse than NDB。这当然是在 App Engine 上使用 NDB 而不是 Datastore API 的原因。

第二,听起来开发者认为 NDB 既复杂又相当成熟,似乎一致支持its eventual inclusion in the Cloud Datastore python library。因此,新开发银行似乎不太可能被终止。最有可能的是,它最终可能只需要从更广泛的 gcloud 库集中包含。

第三,开发人员指出NDB support beyond App Engine is being actively developed,所以如果我的项目超越了 App Engine,到那时 NDB 可能已经在其他环境中可用,因此不需要切换到 Cloud Datastore API。此外,标准 App Engine 的下一步是灵活环境,which seems to already support NDB nicely。

所有这一切都表明我应该清楚地推进 NDB,受益于 App Engine 上更好的性能和 ORM 功能,除非 Google 对此事的看法/方向在未来发生变化,否则我很可能会在 Google Cloud 上的其他环境中继续使用 NDB 的选项。我将使用 NDB 并期待它最终包含在 google-cloud-python 中。

如果有人对此事有任何其他经验,我很想听听您的想法。

【讨论】:

现在谁知道如何安装 from google.appengine.ext import ndb 我有错误说模块 google.appengine.ext 无法识别。但是为什么我安装了谷歌云 SDK 我也有这个问题。我的解决方案很丑陋,但似乎有效。我所做的是创建一个 Python 路径编辑 (.pth) 文件并将其加载到站点包文件夹中。在该文件中,我提供了 Google Cloud SDK 的完整路径:/home/user/sdks/google-cloud-sdk/platform/google_appengine/ 然后我使用导入命令将上述目录引入到 google__path__ 中。这是我导入的:import.google.api 丑。这么难看。但它奏效了。

以上是关于App Engine 上 Cloud Datastore 的客户端库 - NDB 或 google-cloud-datastore的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google Cloud App Engine 上运行 PHP 服务

Google Cloud App Engine 文件存储备份

Google App Engine 上的 Production App 突然无法访问 Google Cloud Storage

Google Cloud App Engine 上的 Nodejs 应用程序未启动

需要启用 App Engine 才能使用 Cloud Firestore

Google App Engine - 大查询 - Python 找不到库 google.cloud