App Engine 数据存储区是一个无架构对象数据存储区,具有查询引擎和原子事务。Java SDK 包括 Java 数据对象 (JDO) 和 Java 持久 API (JPA) 接口的实现,以及低级数据存储区 API。
Java 数据对象 (JDO) 是用于将包含数据的对象存储在数据库中的标准接口。该标准定义用于对 Java 对象进行批注、通过查询检索对象,以及使用事务与数据库交互的接口。使用 JDO 接口的应用程序可以在不使用任何数据库特定的代码的情况下使用不同类型的数据库,包括关系数据库、层次数据库和对象数据库。至于其他接口标准,JDO 使您的应用程序可轻松地在不同的存储解决方案之间移植。
要使用 JDO 访问数据存储区,App Engine 应用程序需进行以下设置:
- JDO 和 DataNucleus App Engine 插件 JAR 必须位于应用程序的
war/WEB-INF/lib/
目录。
- 命名为
jdoconfig.xml
的配置文件必须位于应用程序的 war/WEB-INF/classes/META-INF/
目录中,配置为使 JDO 使用 App Engine 数据存储区。
- 项目的构建过程必须对编译的数据类执行后编译“增强”步骤以使其与 JDO 实现相关联。
获取 PersistenceManager 实例
应用程序使用 PersistenceManager 类的实例和 JDO 交互。可通过实例化并调用 PersistenceManagerFactory 类的实例上的方法来获取此实例。工厂使用 JDO 配置来创建 PersistenceManager 实例。
由于 PersistenceManagerFactory 实例需要时间来初始化,因此应用程序应重复使用单个实例。为强制执行此操作,如果应用程序实例化一个以上 PersistenceManagerFactory(具有相同配置名称),将引发异常。管理 PersistenceManagerFactory 实例的一个简单方式是创建一个具有静态实例的单独包装器类,如下所示:
PMF.java
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;
public final class PMF {
private static final PersistenceManagerFactory pmfInstance =
JDOHelper.getPersistenceManagerFactory("transactions-optional");
private PMF() {}
public static PersistenceManagerFactory get() {
return pmfInstance;
}
}
应用程序使用工厂实例来为访问数据存储区的每一请求创建一个 PersistenceManager 实例。
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import PMF;
// ...
PersistenceManager pm = PMF.get().getPersistenceManager();
使用 PersistenceManager 来存储、更新和删除数据对象并执行数据存储区查询。
完成 PersistenceManager 实例时,您必须调用其 close()
方法。在调用实例的 close()
方法后使用 PersistenceManager 实例是错误的。
try {
// ... do stuff with pm ...
} finally {
pm.close();
}
不支持的 JDO 功能
App Engine 实例不支持 JDO 接口的以下功能:
- 无主的关系。您可以使用显式 Key 值实现无主的关系。在未来版本中可能支持 JDO 的关于无主关系的语法。
- 有主的多对多关系。
- “Join”查询。当对父类型执行查询时,不可在过滤条件中使用子实体的字段。请注意,您可以用键直接在查询中测试父实体的关系字段。
- JDOQL 分组和其他聚合查询。
- 多态查询。您不可执行某一类的查询以获取子类的实例。各类都由数据存储区中的单独实体类型表示。
- 针对
@PersistenceCapable
批注的 IdentityType.DATASTORE
。仅支持 IdentityType.APPLICATION
。
- 目前,有阻止超类中的持久性字段保存到数据存储区中的错误。这将在未来版本中修复。
您可以使用 JDO 在数据存储区中存储普通 Java 数据对象(有时也称为“普通旧 Java 对象”或“POJO”)。每个通过 PersistenceManager 变为持久的对象都成为数据存储区中的一个实体。您可以使用批注告诉 JDO 如何存储和重新创建数据类的实例
类和字段批注
JDO 保存的每个对象都将成为 App Engine 数据存储区中的实体。实体的类型从类的简单名称派生(内部类使用不带包名称的 $
路径)。类的每个持久字段代表实体的一个属性,其中属性的名称与字段的名称相同(保留大小写)。
要将 Java 类声明为能够通过 JDO 在数据存储区中存储或检索,请为该类指定 @PersistenceCapable
批注。
要存储到数据存储区中的数据类的字段必须声明为持久字段。要将字段声明为持久,请为其指定 @Persistent
批注:
要将字段声明为非持久(该字段不会存储到数据存储区中,也不会在检索对象时还原),请为其指定 @NotPersistent
批注。
字段的类型可以是以下任意一种。下文详细说明了这些类型。
- 数据存储区支持的核心类型中的一种
- 一个集合(例如
java.util.List<...>
)或核心数据存储区类型的值的数组
-
@PersistenceCapable
类的一个实例或实例集合
- Serializable 类的一个实例或实例集合
- 一个嵌入类,作为实体上的属性存储
数据类必须具有一个专用于存储相应数据存储区实体的主键的字段。您可以在 4 种不同类型的键字段中选择,每一种都使用不同的值类型和批注。(有关详细信息,请参阅创建数据:键。)最简单的键字段是在对象首次保存到数据存储区时,由 JDO 使用在类的所有其他实例中唯一的值自动填充的长整型值。长整型键使用 @PrimaryKey
批注,以及 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
批注
核心值类型
数据存储区支持以下核心值类型:
类型
Java 类
排序顺序
注释
短文本字符串,< 500 字节 |
java.lang.String |
Unicode |
超过 500 字节的值将引发 JDOFatalUserException。 |
短字节字符串,< 500 字节 |
com.google.appengine.
api.datastore.ShortBlob
|
字节顺序 |
超过 500 字节的值将引发 JDOFatalUserException。 |
布尔值 |
boolean 或
java.lang.Boolean
|
false <true
|
|
整数 |
short 、java.lang.Short
、int 、
java.lang.Integer 、
long 、java.lang.Long
|
数字 |
作为长整型存储,然后转换为字段类型。超出范围的值将溢出。 |
浮点数字 |
float 、java.lang.Float 、
double 、
java.lang.Double
|
数字 |
作为双精度浮点数存储,然后转换为字段类型。超出范围的值将溢出。 |
日期时间 |
java.util.Date |
按时间顺序 |
|
Google 帐户 |
com.google.appengine.api.
users.User
|
按电子邮件地址 (Unicode) |
|
长文本字符串 |
com.google.appengine.api.
datastore.Text
|
(不可排序) |
未编入索引。 |
长字节字符串 |
com.google.appengine.api.
datastore.Blob
|
(不可排序) |
未编入索引。 |
实体键 |
com.google.appengine.api.
datastore.Key
,或引用的对象(作为子对象)
|
按路径元素(类型、ID 或名称、类型、ID 或名称...) |
|
网址 |
com.google.appengine.
api.datastore.Link
|
Unicode |
分享到:
相关推荐
数据生成是通过 CPIM 和 Kundera GAE 数据存储扩展提供的。 ###Bulild 只需运行: mvn clean package 创建了一个可执行的 jar。 请注意,pom 文件包含的修改版本和作为依赖项,这些在 maven 的公共存储库中不...
GAE是Google提供的一个云计算平台,允许开发者在Google的基础设施上部署和运行Web应用,提供了包括计算、存储、数据库等在内的多种服务。 首先,Google App Engine(GAE)是Google推出的一个PaaS(Platform as a ...
DSQL扩展了gae数据存储区,以实现各种数据存储区之间的本地联接,以及为未索引的属性提供本地过滤。 DSQL使用熟悉的sql语法。 SQL联接使用数据存储统计信息进行了优化。 假定数据存储架构的设计类似于关系数据库。...
- `Photo` Bean:定义了存储图像所需的信息,如标题、说明和二进制数据。 - Datastore DAO:使用Objectify库来与Bigtable交互,实现存储和检索`Photo`对象。 - Servlet:采用Template Method模式封装工作流程,对每...
2. **数据存储**:Spring与GAE的数据存储API(如JDO或JPA)结合,可以提供一个统一的数据访问层,简化对Google Datastore的操作。 3. **调度任务**:Spring的TaskExecution和TaskScheduler模块可以与GAE的后台任务...
**App Engine Java SDK** 是开发GAE Java应用的核心工具,它包含了运行和测试应用所需的服务器软件,以及模拟所有GAE服务的本地版本,如**数据存储区**、**Google账户集成**和API调用。SDK还允许你在本地计算机上...
【标题】"gae-pytorch-master_pytorch_pytorchgae_GAE_自编码器_gaepytorchmaster_" 提供的信息表明,这是一个使用PyTorch实现的图自编码器(Graph Autoencoder, GAE)项目,其核心是将自编码器的概念应用于图数据。...
《GAE编程指南》是一种云计算服务,跟其他的同类产品不同,它提供了一种简单的应用程序...你将会学到有关App Engine的应用程序服务器架构、运行时环境以及可伸缩数据存储区等知识,还可以学到一些应用程序优化方法。
GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则
《GAE编程指南》是一种云计算服务,跟其他的同类产品不同,它提供了一种简单的应用程序...你将会学到有关App Engine的应用程序服务器架构、运行时环境以及可伸缩数据存储区等知识,还可以学到一些应用程序优化方法。
图形自动编码器(Graph Autoencoder, GAE)是一种应用于图数据的深度学习模型,它结合了自动编码器(Autoencoder)的思想与图神经网络(Graph Neural Network, GNN)的特性。GAE的目标是学习到图的低维表示,即节点...
pass之GAE入门教程, 学习GAE
- GAE 使用自己的数据存储系统,称为 Datastore,提供了 NoSQL 数据模型。 - 查询语言 GQL 类似于 SQL,用于检索和操作数据。 8. **使用模板文件** - Django 模板引擎可以用于创建动态网页,实现数据和页面结构...
### GAE之webapp框架详解 #### 一、引言 在Google App Engine (GAE) 平台上进行Web应用开发时,选择合适的框架对于提高开发效率至关重要。其中,`webapp` 框架因其简洁高效而备受开发者青睐。本篇文章将详细介绍`...
标题 "GAE包(以配置好,解压可用)" 提供的信息表明,这是一个已经预配置好的Google App Engine (GAE)开发环境的压缩包。GAE是Google提供的一项平台即服务(PaaS),允许开发者在Google的基础设施上运行自己的Web...
2. **项目结构**:在GAE上部署应用通常需要一个特定的项目结构,包括`app.yaml`配置文件,它定义了应用的运行环境、服务、版本和其他元数据。在给定的文件名称列表中,我们看到了`index.yaml`,这通常是用于定义应用...
3. **数据存储**:GAE提供了NoSQL数据库服务,称为**Datastore**。它是一种非关系型分布式数据库,支持高可用性和可扩展性。了解其数据模型(实体、键、属性)和查询语言(GQL或通过API)是至关重要的。 4. **服务...
标题“GAE read rss send to 腾讯微博”指的是一个使用Google App Engine(GAE)平台开发的应用程序,该程序的功能是从RSS源读取数据并将其发布到腾讯微博。RSS(Really Simple Syndication)是一种内容聚合格式,常...