当前位置: 首页 > 知识库问答 >
问题:

如何在JDO for datastore中实现无父实体的强一致性

岳玉堂
2023-03-14

这是我的简单实体:

import com.google.appengine.api.datastore.Key;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

@PersistenceCapable 

public class Food {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key id;
    @Persistent
    private String name;
    @Persistent
    private String description;
    public Key getId() {
        return (id);
    }
    public void setId(Key id) {
        this.id = id;
    }
    public String getName() {
        return (name);
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDescription() {
        return (description);
    }
    public void setDescription(String description) {
        this.description = description;
    }
}

我以这种方式加载我的食物清单:

try {
            pm = PMF.get().getPersistenceManager();
            Query q = pm.newQuery(Food.class);
            foods = (List<Food>) q.execute();
        } catch (Exception exc) {
            exc.printStackTrace();
        }
        finally {
            pm.close();
        }

Key是为每个Food实体自动生成的。我也在使用HRD。因此...上面的查询(pm.newQuery(Food.class);)不具有很强的一致性,一次返回所有结果,第二次不返回新创建的食物。如何以这种方式更改此查询,以至于每次我从数据库中获取所有食物。在datastore留档中,我读过应该是祖先查询,但我没有祖先路径。(我应该说我是datastore新手,还在从昨天学习,但这个花了我很多时间)。请帮帮我。

共有2个答案

石思淼
2023-03-14

如果不使用父级,则无法实现强一致性。这就是重点。要么使用祖先,要么接受有时查询结果会过时的事实(并使用例如memcache来解决这一问题)。

公冶和豫
2023-03-14

关于App engine数据存储的工作原理和强一致性的两个优秀且易于理解的视频:

第1部分:数据存储简介

https://www.youtube.com/watch?v=fQazhzcC-rg公司

第2部分:数据存储查询、索引和事务

https://www.youtube.com/watch?v=d4CiMWy0J70#t=645

 类似资料:
  • 我正在努力实现强烈的一致性。让我们调用我的模型PVPPlayer: 模型的每个关键点都是这样创建的: 其中,配置文件是父模型: 我有2个REST api url: 在1)我做: 在2)我做: 我的流程如下所示: 问题: 使用保证了很强的一致性,所以我不明白的是为什么有时由于,我得到了一些陈旧的数据,比如点根本没有更新。 示例:

  • 我有一个这样的模型: 由于以上字段都不是唯一的,所以电子邮件也不是唯一的,因为许多人可能没有电子邮件ID。因此,我使用以下逻辑创建字符串id 我使用get_or_insert插入实体。 虽然添加用户不会经常发生,但任何冲突都会是灾难性的,这意味着竞争的可能性较小,但其影响非常大。 我的问题是: PS:出于几个原因,我不能将所有用户实体保留在同一个实体组中。

  • 我将JPA2与Hibernate一起使用。有两个实体类,和。最后一个是第一个的继承实体。使用SINGLE_TABLE继承策略。当我尝试通过从id=“123456”的CardElement中查询

  • 我很好奇,在JPA/Hibernate的父实体中,是否可能有几个相同实体的@manytone关系。 示例:我有银行交易,每笔交易都有一个银行合作伙伴,分别担任债权人和债务人。关键是,我只想编辑一次数据。昵称为“情妇”的银行合作伙伴只有一个:),无论是债权人还是债务人。一旦,它将重命名为妻子,所以我不想单独更改。此外,余额是BankPartners在这两个角色中的所有交易的总和。 @实体公共类事务{

  • 我正在尝试使用JPA注释设计我的实体类。 我正在努力做的是: 具有 ID、***电子邮件、密码、activation_key、active、role***的用户表 和许多类型的用户表。 student_table user_id第一名最后一名公司地址等 MENTOR user_id第一名最后一名DOB部门等 当用户注册时,根据他们的角色,他们将被分为两个表(用户、导师/学生) 当它们登录时,Man

  • 我想知道在Spring项目中更新JPA实体的最佳实践是什么-更新原始实体还是创建新实体?我看到了这两种方法: 使用原始-在原始实体中实现必要的字段,并将更新后的实体保存回存储库 使用复制-手动创建实体的新实例,将原始实体中的所有字段(更新的字段)设置为新实体,并将实体保存回存储库 您使用/推荐什么方法?为什么呢?