gpt4 book ai didi

database - AppEngine 数据库 "cold start time"是什么?

转载 作者:太空狗 更新时间:2023-10-30 01:45:45 27 4
gpt4 key购买 nike

我读到的关于 AppEngine 数据库(用于 Java)的最常见的提示之一是它在“冷启动时间”方面极其缓慢。这是什么意思?这是我应该担心的事情吗?

最佳答案

这是你应该担心的事情。

当您的应用在特定时间段内没有任何请求时,Google App Engine 会启动一个新的 JVM 来处理请求。从“冷”获取数据存储的句柄——即第一次在 JVM 中——可能需要相当长的时间,多达 5 秒以上。

在您处理数据存储(通常是 PersistenceManager 的一个实例)之后,一切都很好(对于 JVM 的生命周期而言!)。

编辑:

在 GAE-Java 中启动新的 JVM 也很慢。阅读http://code.google.com/appengine/docs/java/datastore/overview.html并且您会看到他们使用 Singleton 类来实现 PersistenceManagerFactory 的可用性,因为他们将实例化一个操作描述为“昂贵”。

您可以自己测试一下。在 GAE-Java 上创建一个仅返回“Hello World!”的全新应用程序你会发现对应用程序的第一个请求需要几秒钟。

PersistenceManagerFactory 添加一个请求,你会发现第一个请求多花了几秒钟。

编辑编辑:

为了您的观看乐趣,我现在创建了这个测试:

http://stackoverflowanswers.appspot.com/helloworld

您将立即看到“Hello, world 0”或“Hello, world xxxx”,其中 xxxx 是 MS 中获取数据存储句柄所需时间的计数。我认为数据存储中索引的复杂性和数量可能会影响处理数据存储所需的时间,因为在这个应用程序中它比在我的其他一些应用程序中更快。

PMF 是应用引擎文档中提供的副本。

@SuppressWarnings("serial")
public class HelloWorldServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
long a = System.currentTimeMillis();
PersistenceManager p = PMF.get().getPersistenceManager();
long b = System.currentTimeMillis() - a;
resp.setContentType("text/plain");
resp.getWriter().println("Hello, world "+b);
}
}

编辑编辑:

我更改了我的代码,以便它为每个请求实例化一个 PersistenceManagerFactory,现在它抛出 500 个服务器错误,并在日志中:

javax.jdo.JDOFatalUserException: Application code attempted to create a PersistenceManagerFactory named transactions-optional, but one with this name already exists! Instances of PersistenceManagerFactory are extremely slow to create and it is usually not necessary to create one with a given name more than once. Instead, create a singleton and share it throughout your code. If you really do need to create a duplicate PersistenceManagerFactory (such as for a unittest suite), set the appengine.orm.disable.duplicate.pmf.exception system property to avoid this error.

我认为我不需要提供任何更多证据来证明在 App Engine 中处理数据存储很慢。

关于database - AppEngine 数据库 "cold start time"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2757103/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com