通过减小实体大小来提高 App Engine 性能

2024-02-08

目的是减少经常运行且每次必须 db.get() 数百个键的代码的 CPU 成本和响应时间。

这还管用吗?

我可以预期具有数百个键的 db.get() 的 API 时间吗 当我减小实体的大小时大致线性地减小? 目前该实体附加了以下数据:9 String、9 布尔值、8 个整数、1 个 GeoPt、2 个日期时间、1 个文本(平均大小约 100 字节 FWIW),1 个参考,1 个 StringList(平均大小 500 字节)。目标是 将绝大多数数据移至相关类,以便 主模型的核心获取会很快。

如果有效的话,它是如何实施的?

重构后,我还会遇到同样的情况吗? 获取现有实体的成本高吗?文档说所有 模型的属性是同时获取的。会老吗 不需要的属性仍然通过 RPC 在我的钱上传输,而用户 等待?换句话说:如果我想减少实体的加载时间,就是 有必要将旧实体迁移到新实体 定义?如果是这样,是否足以重新放置()该实体,或者我必须 保存在全新的密钥下?

Example

考虑:

class Thing(db.Model):
    text    = db.TextProperty()
    strings = db.StringListProperty()
    num     = db.IntegerProperty()

thing = Thing(key_name='thing1', text='x' * 10240,
      strings = ['y'*500 for i in range(10)], num=23)
thing.put()

假设我重新定义了要精简的 Thing 并推出了新版本:

class Thing(db.Model):
    num = db.IntegerProperty()

我再次获取它:

thing_again = Thing.get_by_key_name('thing1')

我是否减少了该实体的获取时间?


按顺序回答您的问题:

  • 是的,分割模型会减少获取时间,尽管可能不是线性的。对于像您这样的相对较小的模型,差异可能不会很大。大型列表属性是增加获取时间的主要原因。
  • 当您在更改模型后获取实体时,旧属性仍将被转移,因为数据存储不了解模型。
  • 不过,即使调用 .put(),删除的属性仍然会被存储。目前,有两种方法可以消除旧属性:将所有现有实体替换为新属性,或者使用较低级别的 api.datastore 接口,该接口类似于字典,可以轻松删除键。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过减小实体大小来提高 App Engine 性能 的相关文章

随机推荐

  • My https my site com https my site com网站有一些如下所示的 html
  • 检查单元测试是否委托了所有方法

    假设我有以下课程 public abstract class Foo public int bar implementation public abstract int bar2 和一个基类 以便更轻松地为此类编写装饰器 public cl
  • 算术运算的右侧必须是“any”、“number”或枚举类型

    我在 JS 中有这段代码 我需要让它在 TypeScript 中工作 它一直在说 算术运算的右侧必须是 any number 或枚举类型 sort field reverse primer var key primer function x
  • 使用 jQuery 防止第二个按钮单击

    我的页面上有一个按钮 如果用户第二次单击该按钮 我不想执行任何操作 我有以下代码 但它不起作用 有人可以帮忙吗 myButton click function var count 0 count alert button if count
  • C 有跨平台文件 IO/路径 util 库吗?

    是否有一些 C 库可以实现与平台无关的路径操作版本 我想到的一些例子 从相对路径获取绝对路径 不需要文件存在 确保目录存在 创建一个文件 如果不存在 以及给定路径中缺少的任何目录 连接路径 获取路径的目录部分 获取路径的文件名部分 还有很多
  • 如何在 Octave 中声明符号矩阵?

    在 MatLab 中 您可以非常轻松地声明符号 syms a b mat a b 但是 当我尝试在 Octave 中复制此内容时 出现错误 这是我正在使用的代码 gt symbols gt a sym a a a gt b sym b b
  • 如何强制 Instagram 在 Safari 而不是应用内浏览器中打开链接

    Instagram 添加了一个应用内浏览器 打开链接时会自动使用该浏览器 我的网站需要在普通浏览器中打开 例如 Safari 适用于 iPhone 我试图弄清楚如何强制它重定向到正确的浏览器 如果通过 Instagram 浏览器打开此链接
  • RxJava/RxAndroid 检查互联网连接是否可用

    我有这个代码来检查互联网连接是否可用 public static boolean isOnline Runtime runtime Runtime getRuntime try Process ipProcess runtime exec
  • Pytest 可以在预先安排的时间运行吗?

    我正在使用 pytest 使用 python3 脚本运行我的测试 如下所示 pytest s test file py tee a myoutput log 有用 现在我想在每天的特定时间运行它 我尝试从 Linux 控制台 crontab
  • 类型错误:无法将序列乘以 float 类型的非 int

    我试图把float and int在我的编码中 但它仍然说 不能将序列乘以非 int 类型float PV input investment amout r float input rate n int input year FV cont
  • Gradle:找不到提供的方法()

    这是首选 https virgo47 wordpress com 2015 05 13 why gradle doesnt provide provided provided or provided group这是哪里有记录的 https
  • 如何更改文本区域中的字体颜色

    现在我有一个文本区域 可以从字符串中获取文本 我将文本区域的背景颜色设置为黑色 但是默认文本颜色为黑色 因此在突出显示它之前您看不到它 我似乎无法找到将字体颜色更改为白色的方法 CSS 有没有一种简单的方法可以做到这一点 html div
  • XPC 在工作区中的两个可可应用程序之间,NSXPCConnection 立即失效

    我有两个 Cocoa 应用程序 一个将成为此 XPC 关系中的发送者 另一个将成为接收者 In the applicationDidFinishLaunching在发送方中 我首先打开第二个接收方应用程序 NSError error nil
  • Android 在 Fling 上获取 Mapview 停止动画

    我需要限制用户可以在地图视图中导航到的区域 除非他们会看到空白屏幕 我创建了一个扩展地图视图并覆盖 onTouchEvent 的类 我正在检测 ACTION UP 操作并检查此处的坐标 并在必要时重新定位地图 一切正常 直到用户 扔 地图
  • 如何将功能区按钮连接到 Excel 加载项中定义的函数?

    我正在使用 MSVS 2013 创建 C MS Excel 加载项 在以前的外接程序范例中 功能区类设计器直接将功能区按钮单击事件连接到外接程序应用程序类中的功能 现在功能区功能在功能区类本身中定义 从单独的功能区控件类访问 ThisAdd
  • 当客户端和服务器位于同一台计算机上时,Kerberos 身份验证不运行

    当尝试从运行 jboss 服务器的同一台计算机访问应用程序时 出现以下错误 org springframework security authentication BadCredentialsException Kerberos valid
  • htaccess 301 重定向整个网站,但有例外

    我正在尝试创建一个 htaccess 文件来重定向我的整个网站 除了一些例外 但我无法让它工作 我需要重定向整个内容 提供特定的重定向 并排除两个页面 以下是我的非工作示例 谢谢 RewriteCond REQUEST URI events
  • 在 PyCharm 中运行 odoo 项目

    让我的脚接触 PyCharm 我有一个项目 它是 Odoo 14 模块 PyCharm 已为我的项目建立索引 它指示错误 警告和拼写错误 好的 现在我想运行我的 Odoo 来看看我的项目做了什么 我假设我应该通过 GUI 中的某个按钮来执行
  • 使用 Xcode 调试 Maya 插件

    我正在尝试使用 Xcode 4 6 3 调试功能调试为 Maya 2013 构建的 Maya 插件 我希望能够设置断点并通过插件进行跟踪 但我无法设置 Xcode 进行 Maya 调试 在 编辑方案 部分中 我将可执行文件设置为 Maya
  • 通过减小实体大小来提高 App Engine 性能

    目的是减少经常运行且每次必须 db get 数百个键的代码的 CPU 成本和响应时间 这还管用吗 我可以预期具有数百个键的 db get 的 API 时间吗 当我减小实体的大小时大致线性地减小 目前该实体附加了以下数据 9 String 9