博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
公开一个云计算和云存储的源代码.
阅读量:6676 次
发布时间:2019-06-25

本文共 4813 字,大约阅读时间需要 16 分钟。

1) Versant数据库可以直接支持复杂的业务模型:

public class Person {

String firstName;

String lastName;

String gender;

String ethnicity;

String language;

// 新增的节点

int index = 5;

Contact info;

Location location;

public String primaryCountry;

public String primaryAreaCode;

HashSet<Person> friends = new HashSet<Person>();

HashSet<Person> colleagues = new HashSet<Person>();

HashSet<Person> family = new HashSet<Person>();

HashSet<Person> relations = new HashSet<Person>();

}

Versant数据库可以直接支持包括HashSetLinkedList在内的复杂数据结构。

 

2Versant数据库可以直接支持复杂的对象间的关系

如下的代码中展示了一个两层的关系结构。

public void addFriend( Person p ){

friends.add(p);

addRelation(p);

p.getFriends().add(this);

}

 

3Versant数据库可以很容易的建立和数据库之间的连接:

Iterator<DatabaseLoginHelper> ite = this.dblist.iterator();

DatabaseLoginHelper helper = (DatabaseLoginHelper)ite.next();

session = new TransSession(helper.getDatabaseNodeProperty());

session.setSchemaOption(TransSession.SCHEMA_ADD_DROP_ATTRIBUTES);

// System.out.println("Define Logical database:");

session.newLogicalDatabase(HPC_DEMO_NETWORK_NAME);

// System.out.println("Add to logical database:"+dbList[0]);

session.addToLogicalDatabase(HPC_DEMO_NETWORK_NAME, helper.databaseName);

System.out.println("Add to logical database:" + helper.databaseName);

 

4Versant数据库可以很容易地创建对象,并保存到数据库中。

TransSession session = DistributedDatabaseManager.getInstance()

.createNewSession();

session.setDefaultDatabase("dbnodeb");

// TransSession session = new TransSession("dbnodea");

/**

* generate 500 random objects

*/

for (int i = 0; i < 1500; i++) {

Person person = new Person();

person.setFirstName("TFistName" + i);

person.setLastName("TListName" + i);

// set storage schema

DistributedDatabaseManager.getInstance()

.setRoundRonPersistentSchema();

session.makePersistent(person);

session.commit();

}

System.out.println("Demo data generated.");

session.commit();

上面的例子中,可以实现自动将数据对象配载到分布式数据库的不同节点中。

 

5)创建复杂的对象关联,在Versant数据库中也非常容易,可以直接理解为内存对象的操作。

public void createKnownPerson() {

TransSession session = DistributedDatabaseManager.getInstance()

.createNewSession();

session.setDefaultDatabase("dbnodeb");

Person personA = new Person();

personA.setFirstName("AAF1");

personA.setLastName("AAL1");

Person personB = new Person();

personB.setFirstName("BBF1");

personB.setLastName("BBL1");

personB.addFriend(personA);

Person personC = new Person();

personC.setFirstName("CCF1");

personC.setLastName("CCL1");

personC.addFriend(personB);

Person personD = new Person();

personD.setFirstName("DDF1");

personD.setLastName("DDL1");

personD.addFriend(personC);

session.makePersistent(personA, "dbnodea");

session.makePersistent(personB, "dbnodeb");

session.makePersistent(personC, "dbnodea");

session.makePersistent(personD, "dbnodeb");

System.out.println("Special Test Data created.");

session.commit();

}

 

6Versant数据库的对象查询

Versant数据库可以支持SQL查询和NOSQL查询两种模式,以下为SQL查询的例子:

TransSession session = DistributedDatabaseManager.getInstance()

.createNewSession();

VQLQuery q = new VQLQuery(

session,

DistributedDatabaseManager.getInstance().HPC_DEMO_NETWORK_NAME,

"select selfoid from com.versant.domain.Person where firstName='AAF1' and lastName='AAL1'");

//"select * from com.versant.domain.Person");

System.out.println("About to execute query, and load root object.");

VEnumeration results = q.execute();

// 创建已经走过的朋友路径,避免回环

System.out

.println("--------------------------------------------------------------------------");

 

7Versant数据库的对象查询

Versant数据库可以支持SQL查询和NOSQL查询两种模式,以下为在查到第一个目标对象,之后采用NOSQL方式,自动执行朋友圈子遍历的例子:

VQLQuery q = new VQLQuery(

session,

DistributedDatabaseManager.getInstance().HPC_DEMO_NETWORK_NAME,

"select selfoid from com.versant.domain.Person where firstName='AAF1' and lastName='AAL1'");

//"select * from com.versant.domain.Person");

System.out.println("About to execute query, and load root object.");

VEnumeration results = q.execute();

// 创建已经走过的朋友路径,避免回环

System.out

.println("--------------------------------------------------------------------------");

long middleTime = System.currentTimeMillis();

HashSet<Person> friendSet = new HashSet<Person>();

if (results.hasMoreElements()) {

Person person = (Person) results.nextElement();

friendSet.add(person);

System.out.println("Start Person found:" + person.getFirstName()

+ "/" + person.getLastName()

+ ", about to print friend path.");

Iterator ite = person.getFriends().iterator();

System.out.print("<<<  -> " + person.getFirstName() + "/"

+ person.getLastName());

while (ite.hasNext()) {

Person aFriend = (Person) ite.next();

if (!inFriendCircle(aFriend, friendSet)) {

System.out.print("--> " + aFriend.getFirstName() + "/"

+ aFriend.getLastName());

printFriendPath("--> ", aFriend, friendSet);

}

}

System.out.println("  >>>");

} else {

System.out.println("No root person found.");

}

long endTime = System.currentTimeMillis();

转载于:https://www.cnblogs.com/markhe01/archive/2012/04/23/2466549.html

你可能感兴趣的文章
FOSCommentBundle功能包:其它添加评论到页面的方法
查看>>
Exchange 2016共享邮箱不保存已发送邮件的问题
查看>>
[C#基础知识系列]全面解析C#中静态与非静态
查看>>
SQL Server 2012笔记分享-40:自动维护索引
查看>>
C/C++各种系统开发环境搭建
查看>>
Linq技术四:动态Linq技术 -- Linq.Expressions
查看>>
ARC __bridge modifiers demystified
查看>>
[转]HTML字符实体(Character Entities),转义字符串(Escape Sequence)
查看>>
真正的干货是什么?
查看>>
SharedPreference.Editor的apply和commit方法异同
查看>>
linux shell “(())” 双括号运算符使用
查看>>
http://code.662p.com/view/5141.html
查看>>
C C++ OC指针常量和常量指针区别
查看>>
mysql函数大全
查看>>
tomcat内存溢出设置JAVA_OPTS
查看>>
[CareerCup] 12.5 Test a Pen 测试一支笔
查看>>
Maven支撑下的War应用依赖另外一个WAR应用的解决方案
查看>>
JavaScrip——练习(做悬浮框)
查看>>
从游戏开发到应用开发的转变
查看>>
UIApearance
查看>>