WEB开发网
开发学院软件开发Java Java 开发 2.0: NoSQL 阅读

Java 开发 2.0: NoSQL

 2010-07-20 00:00:00 来源:WEB开发网   
核心提示: 通过 Shards 伸缩Sharding是一种分区形式,它将一个表结构复制到多个节点,Java 开发 2.0: NoSQL(4),但逻辑上在各节点之间划分数据,例如,(如果这听起来耸人听闻,不用担心,一个节点可以拥有驻留在美国的帐户的所有相关数据,而另一个节点则针对驻留在欧洲的所有帐户

通过 Shards 伸缩

Sharding是一种分区形式,它将一个表结构复制到多个节点,但逻辑上在各节点之间划分数据。例如,一个节点可以拥有驻留在美国的帐户的所有相关数据,而另一个节点则针对驻留在欧洲的所有帐户。但如果节点拥有关系 —即跨 Shard 联接,Shards 就会出现问题。这是一个棘手的问题,在很多情况下都无法解决。

无模式数据存储的好处之一是无须事先知道所有事情,也就是说,与使用关系数据库架构相比,可以更轻松地适应变化。(注意,我并非暗示不能更改架构;我只是说,可以更轻松地适应变化。)我不打算定义我的域对象上的属性 —我将其推迟到 Groovy 的动态特性(实际上,这个特性允许创建针对 Google 的 Entity对象的域对象代理)。相反,我将把我的时间花费在确定如何查找对象并处理关系上。这是 NoSQL 和各种利用无模式数据存储的框架还没有内置的功能。

Model 基类

我将首先创建一个基类,用于容纳 Entity对象的一个实例。然后,我将允许一些子类拥有一些动态属性,这些动态属性将通过 Groovy 的方便的 setProperty方法添加到对应的 Entity实例。setProperty针对对象中实际上不存在的任何属性设置程序调用。(如果这听起来耸人听闻,不用担心,您看到它的实际运行后就会明白。)

清单 2 展示了位于我的示例应用程序的一个 Model实例的第一个 stab:

清单 2. 一个简单的 Model 基类

 package com.b50.nosql 
 
 import com.google.appengine.api.datastore.DatastoreServiceFactory 
 import com.google.appengine.api.datastore.Entity 
 
 abstract class Model { 
 
 def entity 
 static def datastore = DatastoreServiceFactory.datastoreService 
 
 public Model(){ 
 super() 
 } 
 
 public Model(params){ 
 this.@entity = new Entity(this.getClass().simpleName) 
 params.each{ key, val -> 
  this.setProperty key, val 
 } 
 } 
 
 def getProperty(String name) { 
 if(name.equals("id")){ 
  return entity.key.id 
 }else{ 
  return entity."${name}" 
 } 
 } 
 
 void setProperty(String name, value) { 
 entity."${name}" = value 
 } 
 
 def save(){ 
 this.entity.save() 
 }  
 } 

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:Java 开发 NoSQL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接