【问题标题】:Why previous data's are missing after every run in App Engine?为什么每次在 App Engine 中运行后都会丢失以前的数据?
【发布时间】:2014-12-15 17:08:18
【问题描述】:

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

案例 2: 如果我在一个会话中的数据存储区中插入了 4 个数据,然后在下一个会话中,我以前的数据的 2 或 3 个丢失了。在这种情况下,不是所有的数据。有时也缺少一个数据。

我搜索了这个,发现每次运行都会创建local_db.bin。我通过在 VM 参数中添加以下条件来阻止它 - Ddatastore.backing_store=PATH。 但我仍然有不一致的行为。虽然 local_db.bin 文件没有被删除,但数据存储行为不稳定。 (例如,有时实体被成功保留,有时某些实体被删除)。当我与我的 Android 应用集成时会发生这种情况

【问题讨论】:

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


    【解决方案1】:

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

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

    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

    【讨论】:

    • 我已经编辑了我的帖子,我按照你的建议做了。
    • 为什么人们给我投反对票??我问过愚蠢的问题吗!
    【解决方案2】:

    由于您使用 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 开发服务器的自定义数据存储位置的另一种解决方案。

    【讨论】:

    • @setubasak 您是否同时运行多个开发服务器实例?还要检查你的开发服务器日志,也许你会在那里找到解释。到目前为止我还没有遇到过这样的问题。
    • 不。我没有同时运行多个开发服务器实例。我的伙伴也面临同样的问题。:(
    【解决方案3】:

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

    【讨论】:

    • 为什么人们给我downvote??我问了愚蠢的问题!
    猜你喜欢
    • 2012-02-26
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 2020-08-24
    • 2020-07-26
    相关资源
    最近更新 更多