为什么在App Engine中每次运行后都缺少以前的数据?

时间:2014-12-15 17:08:18

标签: android google-app-engine google-cloud-storage google-cloud-endpoints

我正在尝试用Google Cloud Storage了解JAVA几天,我在数据存储中插入了一些数据,插入的数据可以从这里看到 // localhost: 8080 / _ah / admin / 。现在当我停止这个会话并再次运行后端时,我看到了一些奇怪的行为 案例1:当我再次运行时,我之前的数据已经消失。

案例2:如果我在会话中的数据存储区中插入了4个数据,那么在下一个会话中,我之前的数据中丢失了2或3个。在这种情况下,并非所有数据都是。有时也会丢失一个数据
我搜索了这个,我看到每次运行都会创建local_db.bin。我通过在VM参数中添加以下条件来阻止它 - Ddatastore.backing_store=PATH。 但我仍然有不一致的行为。虽然local_db.bin文件未被删除,但数据存储行为不稳定。 (例如,有时实体成功保存,有时一些实体被删除)。当我与我的Android应用程序集成时会发生这种情况吗?

3 个答案:

答案 0 :(得分:1)

在启动期间,App Engine开发服务器显示其正在使用的数据存储文件的位置。我在过去看到每次启动服务器时都使用不同的数据存储文件。

您可以将数据存储文件复制到您选择的位置。使用datastore_path标志通知dev服务器使用哪个数据文件。这将允许开发服务器在每次启动时使用相同的数据存储文件。

dev_appserver.py --datastore_path=/data_path/myapp_datastore myapp

如您所述,您不应该看到随机数据从您的应用中消失。要记住的一件事是Google Cloud Datastore使用最终的一致性模型。因此,如果您在返回所有记录列表的同一过程中插入新记录 - 在刷新应用程序中的页面之前,您可能看不到新记录。

通过使用祖先查询,有很多方法可以强制实现一致性。有关祖先查询的更多信息,请参阅文档:

https://cloud.google.com/appengine/docs/python/datastore/queries#Python_Ancestor_queries

答案 1 :(得分:1)

因为您正在使用Java进行开发,您可以提供像这样的VM参数

-Ddatastore.backing_store="/path/to/datastore/file/location/local_db.bin"

更多信息:https://code.google.com/p/android/issues/detail?id=68225

您还可以在我的question中使用Java dev服务器找到另一个自定义数据存储位置的解决方案。

答案 2 :(得分:0)

//localhost:8080/_ah/admin/仅显示计算机本地使用的数据,仅用于测试目的。它没有以任何方式链接到实际的数据存储区。在将应用程序部署到App Engine后,您还应该使用实际数据测试您的应用程序。