Java开发2.0: NoSQL - 编程入门网
作是将您的域映射到底层数据 存储,这在使用 Google App Engine 时再简单不过了。
在文章 “Java 开发 2.0:针对 Google App Engine 的 Gaelyk” 中,我介 绍了 Gaelyk —— 一个基于 Groovy 的框架,该框架有利于使用 Google 的底层 数据存储。那篇文章的主要部分关注如何利用 Google 的 Entity对象。下面的示 例(来自那篇文章)将展示对象实体如何在 Gaelyk 中工作。 清单 1. 使用 Entity 的对象持久存储
通过对象设计 倾向于对象模型而不是数据库的设计的模式在 Grails 和 Ruby on Rails 这 样的现代 Web 应用程序框架中展现出来,这些现代 Web 应用程序框架强调对象 模型的设计,并为您处理底层数据库架构创建。 这种对象持久存储方法很有效,但容易看出,如果您频繁使用票据实体 —例 如,如果您正在各种 servlet 中创建(或查找)它们,那么这种方法将变得令人 厌烦。使用一个公共 servlet(或 Groovlet)来为您处理这些任务将消除其中一 些负担。一种更自然的选择 —我将稍后展示 —将是建模一个 Ticket对象。 返回比赛 我不会重复 Gaelyk 简介中的那个票据示例,相反,为保持新鲜感,我将在本 文中使用一个赛跑主题,并构建一个应用程序来展示即将讨论的技术。 如图 1 中的 “多对多” 图表所示,一个 Race拥有多个 Runner,一个 Runner可以属于多个 Race。 图 1. 比赛和参赛者 如果我要使用一个关系表结构来设计这个关系,至少需要 3 个表:第 3 表将 是链接一个 “多对多” 关系的联接表。所幸我不必局限于关系数据模型。相反 ,我将使用 Gaelyk(和 Groovy 代码)将这个 “多对多” 关系映射到 Google 针对 Google App Engine 的 Bigtable 抽象。事实上,Gaelyk 允许将 Entity当 作 Map,这使得映射过程相当简单。 通过 Shards 伸缩 Sharding是一种分区形式,它将一个表结构复制到多个节点,但逻辑上在各节 点之间划分数据。例如,一个节点可以拥有驻留在美国的帐户的所有相关数据, 而另一个节点则针对驻留在欧洲的所有帐户。但如果节点拥有关系 —即跨 Shard 联接,Shards 就会出现问题。这是一个棘手的问题,在很多情况下都无法解决。 无模式数据存储的好处之一是无须事先知道所有事情,也就是说,与使用关系 数据库架构相比,可以更轻松地适应变化。(注意,我并非暗示不能更改架构; 我只是说,可以更轻松地适应变化。)我不打算定义我的域对象上的属性 —我将 其推迟到 Groovy 的动态特性(实际上,这个特性允许创建针对 Google 的 Entity对象的域对象代理)。相反,我将把我的时间花费在确定如何查找对象并 处理关系上。这是 NoSQL 和各种利用无模式数据存储的框架还没有内置的功能。 Java开发2.0: NoSQL(3)时间:2011-09-04 IBM Andrew GloverModel 基类 我将首先创建一个基类,用于容纳 Entity对象的一个实例。然后,我将允许 一些子类拥有一些动态属性,这些动态属性将通过 Groovy 的方便的 setProperty方法添加到对应的 Entity实例。setProperty针对对象中实际上不存 在的任何属性设置程序调用。(如果这听起来耸人听闻,不用担心,您看到它的 实际运行后就会明白。) 清单 2 展示了位于我的示例应用程序的一个 Model实例的第一个 stab: 清单 2. 一个简单的 Model 基类
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |