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数据库可以直接支持包括HashSet、LinkedList在内的复杂数据结构。
2)Versant数据库可以直接支持复杂的对象间的关系
如下的代码中展示了一个两层的关系结构。
public void addFriend( Person p ){
friends.add(p);
addRelation(p);
p.getFriends().add(this);
}
3)Versant数据库可以很容易的建立和数据库之间的连接:
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);
4)Versant数据库可以很容易地创建对象,并保存到数据库中。
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()
.setRoundRobinPersistentSchema();
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();
}
6)Versant数据库的对象查询
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("--------------------------------------------------------------------------");
7)Versant数据库的对象查询
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();
分享到:
相关推荐
4. **多集群配置**:允许将多个具有不同内部网络地址的集群配置到同一个云环境中,从而实现了更灵活的资源管理和调度。 #### 三、Eucalyptus的架构 Eucalyptus的架构主要包括五个核心组件,这些组件之间通过具有WS...
最后,由于源代码公开,安全研究人员可以更深入地查找并修复潜在的安全漏洞,从而提高了系统的安全性。 Linux系统的诞生与Linux之父Linus Torvalds密切相关,他在1991年还是芬兰赫尔辛基大学的学生时,为了个人兴趣...
通过区块链,每个搜索请求和响应都可以被记录在链上,形成一个公开的、可审计的记录。这增加了服务提供者的责任和用户的信任度,同时,通过智能合约,可以自动执行一些预定义的规则,例如数据访问权限控制。 在...
OpenStack是一个开源的云计算平台项目,旨在为公共和私有云提供易于部署、扩展和使用的开源云计算软件。它最初由美国国家航空航天局(NASA)和Rackspace联合发起,是一个全球性的开源协作项目,拥有庞大的开发者社区...
总的来说,这个“微软公有云Azure教程”全面介绍了Azure的基础知识、使用方法以及选择Azure的原因,对于希望在云计算领域深耕,特别是想利用Azure服务的个人和企业来说,是一份宝贵的参考资料。通过深入学习,用户...
虽然现在PageRank公开更新已停止,但它仍然是Google搜索算法中的一个重要组成部分。 4. **Google收录**:Google会抓取并索引互联网上的网页,"Google收录"指的是Google数据库中包含的网页数量。被Google收录的页面...
1. **混合云部署模型**:混合云是一种云计算模型,它结合了私有云和公有云的特点,允许数据和应用程序在两者之间流动。这种模型使得组织能够利用公有云的可扩展性和灵活性,同时保持对敏感数据的控制和管理。 2. **...
免费云转码可能有限制,如转码时间、存储空间或带宽,但对于小规模的视频处理需求,它们是一个经济实惠的选择。 5. **全开源终版**: "全开源终版"可能指的是这个项目的最终稳定版本,意味着它的功能已经完善,且...
综上所述,【毕设&课程作业_智能云备份系统.zip】是一个融合了毕业设计与课程实践的项目,它涉及到云计算、人工智能和系统开发等多个IT领域的知识点。通过这个项目,我们可以学习到如何构建一个实用的云备份系统,...
Hadoop是一个开源的大数据处理框架,由Apache软件基金会维护,它能够处理和存储PB级别的数据,具有高度分布式和容错性,非常适合大规模数据分析任务。在这个项目中,我们可以深入学习Hadoop的MapReduce编程模型以及...
描述中的“资源来自pypi官网,资源全名:s3like-1.2.0.tar.gz”再次确认了该软件包的来源和名称,强调了它是一个公开可获取的Python库。 标签中提到的“zookeeper 分布式 云原生 cloud native Python库”揭示了`s3...
7. **源码发布**:"小程序源码"标签意味着这个压缩包可能包含了小程序的完整源代码,对于开发者而言,这是一个学习和定制的宝贵资源。通过查看源码,开发者可以了解其内部工作原理,对功能进行扩展或修改,以适应...
`prospector-0.9.9.tar.gz`是该软件包的特定版本,这里是一个tarball文件,一种常见的压缩格式,用于存储多个文件或目录,便于传输和存储。 **Prospector 库** `Prospector`是Python的一个静态分析工具,它旨在...
开源系统也促进了云计算的发展,例如OpenStack,这是一个开源的云计算平台,用于构建私有云和公有云。OpenStack提供了多种服务,如计算、存储、网络资源的管理和控制。 开源生态系统还包括各种编程语言,如Python、...
这意味着参赛团队不仅设计并实现了软件功能,还公开了他们的源代码,供其他人学习、审查和改进,体现了开源软件的精神。这种开放源代码的做法通常有利于促进技术交流,提升软件质量,也有助于培养学生的协作能力和...
综上所述,`iomed`是一个基于Python的云原生分布式库,可能涉及Zookeeper的使用,适用于需要分布式协调和云环境部署的场景。用户可以通过PyPI下载到0.0.7版本的源代码包,解压后进行安装和进一步探索其功能和用法。...
6. **开源软件**:公开源代码的软件,鼓励社区协作和持续改进。 7. **Git版本控制**:用于跟踪和管理软件开发过程中的版本变化,"master"分支是主要的开发分支。 8. **源码管理**:包括源代码组织结构、构建流程以及...
这个压缩包文件名为pyramid_oereb-1.2.4.dev20181217.tar.gz,包含了该库的所有源代码和相关资源。 首先,我们来看看Pyramid框架。Pyramid是一个轻量级且高度灵活的Python web开发框架,允许开发者用Python编写从...
用户可以根据自身需求调整和优化系统,同时,由于源代码公开,社区可以共同发现和修复问题,提高软件质量。 2. **EC2兼容性**:这种兼容性意味着用户可以使用同样的命令行工具、SDK和自动化脚本来控制开源云服务,...