`
jinjiankang
  • 浏览: 113434 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Google Datastore for Java 文档摘录(一)

阅读更多

The datastore is designed with web applications in mind, with an emphasis on read and query performance.

要知道,datastore是为Web应用程序而设计的,其重点关注的是读取和查询的性能。

 

All queries are pre-indexed for fast results over very large data sets.

为了在大量数据集中快速查询到结果,在datastore中所做的所有查询都必须事先建立索引。与在关系型数据库系统中建立索引的方式不同,在Google App Engine for Java应用中,整个应用程序所使用到的索引被保存在一个XML文件中。你可以手工编写,也可以由Google Plugin for Eclipse自动生成。

 

With the App Engine datastore, every attempt to create, update or delete an entity happens in a transaction .

对App Engine datastore而言,每次创建、更新或删除一个实体的行为都在一个事务中完成。

 

All entities fetched, created, updated or deleted in a transaction must be in the same entity group.

在一个事务中,对多个实体进行增、删、改、查操作时,这些实体必须属于同一“实体组”。在这里,对“实体组”的概念不好理解,下面以一组代码段来解释:

public class Employee {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private String firstName;

    @Persistent
    private String lastName;

    @Persistent
    private Date hireDate;

    ...
}
 
public class ContactInfo {
	@PrimaryKey
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Key key;

	@Persistent
	private String streetAddress;

	@Persistent
	private String city;

	@Persistent
	private String stateOrProvince;

	@Persistent
	private String zipCode;
      
        ...
}
 
		Employee em = new Employee("Jiankang", "Jin", new Date());
		ContactInfo info = new ContactInfo("ZhiChun Road", "Beijing",
				"Beijing", "010");

		PersistenceManager pm = PMF.get().getPersistenceManager();
		Transaction tx = pm.currentTransaction();

		try {
			tx.begin();
			pm.makePersistent(em);
			pm.makePersistent(info);
			tx.commit();







		} catch (Exception e) {
			System.out.println(e);
		} finally {
			if (tx.isActive()) {
				tx.rollback();
			}
			pm.close();
		}

运行Servlet,在控制台看到:

javax.jdo.JDOFatalUserException: Illegal argument
NestedThrowables:
java.lang.IllegalArgumentException: can't operate on multiple entity groups in a single transaction. 

修改后:

public class Employee {
    ...
    @Persistent
    private ContactInfo contactInfo;
    ...
}
 
		ContactInfo info = new ContactInfo("ZhiChun Road", "Beijing",
				"Beijing", "010");
		Employee em = new Employee("Jiankang", "Jin", new Date(), info);

		PersistenceManager pm = PMF.get().getPersistenceManager();
		Transaction tx = pm.currentTransaction();

		try {
			tx.begin();
			pm.makePersistent(em);
			pm.makePersistent(info);
			tx.commit();
		} catch (Exception e) {
			System.out.println(e);
		} finally {
			if (tx.isActive()) {
				tx.rollback();
			}
			pm.close();
		}

 再次运行Servlet,无异常。查看http://127.0.0.1:8080/_ah/admin,Kind Employee有一条记录,Kind ContactInfo有一条记录(注意:不是两条,代码pm.makePersistent(info)是不必要的,即使写了,也只保存一条ContactInfo记录)。而且,The key of the ContactInfo entity has the key of the Employee entity as its entity group parent. 这句话可能引起歧义,我原以为前者的key包含后者的key,但结果是:

the key of Employee is           'agByDgsSCEVtcGxveWVlGAEM',

and the key of ContactInfo is 'agByHwsSCEVtcGxveWVlGAEMCxILQ29udGFjdEluZm8YAgw'.

在Google Groups上请教了该问题,上述现象是正常的,两者的key确实不是简单的字符串包含关系。但可以肯定的是:

KeyFactory.stringToKey(employeeKeyString).equals(KeyFactory.stringToKey(con

tactInfoKeyString).getParent())

参见:http://groups.google.com/group/google-appengine-java/browse_thread/thread/76ca595de10a5a5a/95509d1364acc9d4?lnk=gst&q=jinjiankang1980#95509d1364acc9d4

 

Entity groups are defined by a hierarchy of relationships between entities.

如果多个实体间有关联关系,则它们组成一个实体组。据我我理解,这里的“a hierarchy of relationships”就是指UML中的组合或聚合。

 

(如何使用附件源代码注:使用Google Eclipse插件建立工程,工程名GAE_Test,包名com.gaetest)

(所使用的GAE JDK:appengine-java-sdk-1.2.2)

1
0
分享到:
评论

相关推荐

    Google Datastore for Java 文档摘录(四)

    **Google Datastore for Java 文档摘录(四)** 在这一部分,我们将深入探讨Google Datastore,这是一个在Java环境中使用的云数据库服务。Google Datastore是一个NoSQL文档数据库,提供了高可用性和可扩展性,适用...

    Android DataStore使用和封装

    在Android开发中,数据存储是不可或缺的一部分,DataStore是Google推出的一种新型持久化存储解决方案,旨在替代SharedPreferences。本文将深入探讨Android DataStore的使用方法及其封装技巧,旨在帮助开发者更好地...

    powerbulilder pb datastore实现步骤完整源码.docx

    在PowerBuilder(PB)开发中,DataStore是一个重要的对象,用于存储和操作数据库中的数据。在本示例中,我们详细探讨如何创建、查询、取值以及释放DataStore。 1. **创建DataStore**: 创建一个名为`ds_sale`的...

    Google Datastore的JAR

    Google Datastore的JAR

    VMware Infrastructure SDK for Java

    VMware Infrastructure SDK for Java 是一个由VMware公司提供的软件开发工具包,专为Java开发者设计,用于构建与VMware虚拟化平台交互的应用程序。这个SDK包含了一系列的库、示例代码和文档,使得开发者能够利用Java...

    初用Google App Engine for Java (org.apache.jasper.JasperExceptio; org.datanucleun)

    标题中的“初用Google App Engine for Java”表明我们要探讨的是如何使用Google的App Engine平台来开发Java应用程序。Google App Engine是一个基于云计算的平台,它允许开发者构建和运行Web应用程序,无需管理和维护...

    上传 文件到Google app engine datastore的Demo

    在IT行业中,Google App Engine(GAE)是一个广泛使用的平台,它允许开发者构建并托管Web应用程序。本示例主要关注如何将文件上传到Google App Engine的数据存储(Datastore)。数据存储是GAE的一个核心组件,它是一...

    Laravel开发-laravel-datastore

    "Laravel Datastore"在此上下文中可能指的是Laravel与Google Cloud Datastore的集成,这是一个NoSQL数据库服务,用于存储非结构化数据。在这个主题中,我们将深入探讨Laravel框架与Datastore的结合使用,以及相关的...

    gaedo-google-datastore-0.6.2.zip

    【标题】"gaedo-google-datastore-0.6.2.zip" 提供的是一个与 Google Datastore 集成的开源库,版本为0.6.2。Google Datastore 是 Google 提供的一项托管式数据库服务,它适用于需要高度可扩展性和高可用性的应用。...

    PB虛擬datastore用法

    1. **DataStore**: DataStore是PowerBuilder中的一个对象,用于存储临时数据。它可以被看作是一个小型的内存数据库。 2. **虚拟DataStore**: 虚拟DataStore是指没有实际的物理表或视图对应的数据存储对象。它通常...

    google-api-services-datastore-v1beta1-rev28-1.15.0-rc.zip

    【标题】"google-api-services-datastore-v1beta1-rev28-1.15.0-rc.zip" 涉及的是Google的Datastore API服务的Java客户端库,这是一个针对Google Cloud Datastore的版本1beta1的API,具体版本为rev28,使用的Java...

    appengine-java-sdk-1.3.1 GoogleApp开发的SDK(Java版)

    Java SDK为开发者提供了一组API,可以用来访问Google App Engine的服务,如数据存储(Datastore)、任务队列(Task Queue)、邮件服务(Mail Service)、图像服务(Images Service)等。 在压缩包"appengine-java-...

    Google App Engine1.3.0 java sdk 第一部分

    **Google App Engine 1.3.0 Java SDK 第一部分** Google App Engine(GAE)是谷歌提供的一项云计算服务,允许开发者在谷歌的基础设施上运行自己的应用程序。它为开发者提供了无服务器(Serverless)的环境,可以...

    前端开源库-datastore-fs

    10. **项目结构**:在`js-datastore-fs-master`压缩包中,包含了源代码、测试文件、文档等资源,开发者可以通过阅读源码和文档了解其工作原理,也可以直接在项目中引入使用。 通过理解和应用`datastore-fs`,前端...

    matlab开发-datastore

    在MATLAB中,`datastore`是一个非常重要的数据管理工具,尤其对于数据分析和处理工作流程。这个工具允许用户高效地组织和操作大量数据,而无需将所有数据加载到内存中,这极大地提升了处理大型数据集的能力。在...

    PyPI 官网下载 | google-cloud-datastore-1.7.1.tar.gz

    Datastore提供了一种NoSQL文档数据库模型,支持复杂的查询,并且与Google Cloud Platform的其他服务集成良好。 **google-cloud-datastore库** 是Python开发者用来连接和操作Google Cloud Datastore的工具。该库...

    Beginning Java Google App Engine

    The journey begins with a look at the Google Plugin for Eclipse and finishes with a working web application that uses Google Web Toolkit, Google Accounts, and Bigtable. Along the way, you’ll dig ...

Global site tag (gtag.js) - Google Analytics