- 浏览: 887049 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1096)
- 大数据存储 (76)
- 编程语言(Java&Scala) (46)
- 大数据建模 (33)
- 开发与管理 (8)
- 操作系统 (13)
- 实用代码集合 (25)
- 新技术研究 (15)
- 前端技术研究 (22)
- 物联网 (18)
- 兴趣探索 (15)
- 编程语言(Groovy&Grails) (92)
- 编程语言(RubyOnRails) (153)
- 个人收藏 (153)
- 技术管理 (12)
- 编程语言(Flex) (8)
- 架构和框架(GWT) (4)
- 数学和算法 (6)
- 人工智能(TensorFlow) (11)
- 编程语言(Python) (6)
- 移动开发 (4)
- 软件工程实践 (54)
- 个人感悟 (6)
- 职场感悟 (5)
- 行业经验 (23)
- 产品和运营 (10)
- 生活与随想 (155)
- 简单生活 (70)
- 天空的云 (53)
- 秋月春风 (14)
- 东逝水 (59)
- 浪花淘 (35)
- 白发渔樵 (4)
最新评论
-
cljhyjs:
今天看看在研究,已经安装好了,请问怎么一步一步使用呢?
Thingsboard -
yx200404:
说一下十维空间 -
Clear_Love:
设置了也报错
Xcode 7遇到 App Transport Security has blocked a cleartext HTTP 错误 -
wang263574375:
我想问的是,如果防火墙的设置不能改变,那么要怎么处理呢?
ORA-12571:TNS包写入程序失败 -
ralflsb:
SmartSVN 8.6
SmartSVN破解包
接触到db4o,总结了一下SDK里面的FirstStep,供大家初学的一个参考.
主要内容:
1、什么是db4o
2、db4o的学习资源
3、db4o: the first step
--------------------------------------------------------------------------------
什么是db4o?
db4o是一种纯对象数据库,相对于传统的关系数据库+ORM,db4o具有以下好处:
1)以存对象的方式存取数据(废话~~,不过你考虑一下完全以对象的方式去考虑数据的存取对传统的数据库设计思维来说是多么大的颠覆);
2)无需数据库服务器,只需要一个数据文件,且dll大小仅为300多k,非常适合作为嵌入式数据库;
3)提供Query By Sample, Native Query和Simple Object DataBase Access(SODA)三种方式进行数据查询,操作简便且功能强大,和sql说byebye.
同时,db4o有.net和java两种版本,.net版本已经支持.net 1.0/1.1/2.0了.
db4o可以在:http://www.db4o.com/default.aspx 下载,最新版本为5.2.同时还有一个叫objectmanager的工具,可用于查看数据文件中保存的对象,不过安装前需要安装jvm.
--------------------------------------------------------------------------------
db4o的学习资源
对于初学者来说,参考db4o的api document和db4o tutorial就够了,这些在安装的时候都已经带了,不用到处找了.另外还可以上db4o的官方forum http://forums.db4o.com/login.aspx?pnr=&ReturnUrl=/forums,人气还可以.
--------------------------------------------------------------------------------
db4o: the first step
今天我只是简单的介绍如何使用db4o实现简单对象的crud操作,并且对db4o的插入和查询效率进行了初步的测试,下一步会进行继续的深入,有兴趣的兄弟可以一块交流,db4o和nhibernate搭配实现orm的确是一套很好的方案.
1、基本概念:
先别去想什么db4o又是一套复杂的开源的东西,今天我们只需要了解com.db4o.ObjectContainer和com.db4o.Db4o两个类
(1)com.db4o.Db4o:db4o类库中的关键类之一,本文中的用途是用com.db4o.Db4o.OpenFile来创建和打开db4o的数据库文件
(2)com.db4o.ObjectContainer:简单点来说,db4o的数据库文件就是一个对象的容器(存储的是对象嘛~~),我们可以通过Db4o::OpenFile来获取指向db4o数据库文件的ObjectContainer,进行所需的存取操作后,调用ObjectContainer::Close()来关闭这一连接.
或许你会说,怎么会那么简单,没错,今天接触db4o的时候就是那么舒服,不用管什么数据库的Schema.
2、简单的db4o的存取操作:
示例如何进行对象的存取操作之前,我们先简单的定义一个对象类,用于db4o的存取.
1 /// <summary>
2 /// 用于测试db4o基本crud操作的对象类
3 /// </summary>
4 public class Entity
5 {
6 private string m_strName;
7
8 public Entity(string strName)
9 {
10 this.m_strName = strName;
11 }
12
13 public string Name
14 {
15 get
16 {
17 return this.m_strName;
18 }
19 set
20 {
21 this.m_strName = value;
22 }
23 }
24 }
1)保存对象:
1 private const string CONST_DEFAULT_DATAFILE = @"c:\db4obasic.yap";
2
3 static void Main(string[] args)
4 {
5
6 // 打开数据文件
7 ObjectContainer container = Db4o.OpenFile(CONST_DEFAULT_DATAFILE);
8
9 try
10 {
11 Entity entity = new Entity("calvin");
12 container.Set(entity);
13 }
14 finally
15 {
16 container.Close();
17 }
18 }
2)删除已有对象:
1 private const string CONST_DEFAULT_DATAFILE = @"c:\db4obasic.yap";
2
3 static void Main(string[] args)
4 {
5
6 // 打开数据文件
7 ObjectContainer container = Db4o.OpenFile(CONST_DEFAULT_DATAFILE);
8
9 try
10 {
11 Entity entity = new Entity("calvin");
12 container.Set(entity);
13
14 IList result = container.Get(entity);
15 container.Delete((Entity) result[0]);
16 }
17 finally
18 {
19 container.Close();
20 }
21 }
3)更新对象
1 private const string CONST_DEFAULT_DATAFILE = @"c:\db4obasic.yap";
2
3 static void Main(string[] args)
4 {
5
6 // 打开数据文件
7 ObjectContainer container = Db4o.OpenFile(CONST_DEFAULT_DATAFILE);
8
9 try
10 {
11 Entity entity = new Entity("foo");
12 container.Set(entity);
13
14 IList result = container.Get(entity);
15 entity = (Entity) result[0];
16 entity.Name = "bar";
17 container.Set(entity);
18 }
19 finally
20 {
21 container.Close();
22 }
23 }
在2)和3)中,我使用了QBE来实现对象的查询,按照db4o官方的说法,用QBE可以快速的实现对象简单查询,但是限制也不少:
“Querying this way has some obvious limitations:
- db4o must reflect all members of your example object.
- You cannot perform advanced query expressions. (AND, OR, NOT, etc.)
- You cannot constrain on values like 0 (integers), "" (empty strings), or nulls (reference types) because they would be interpreted as unconstrained.
- You need to be able to create objects without initialized fields. That means you can not initialize fields where they are declared. You can not enforce contracts that objects of a class are only allowed in a well-defined initialized state.
- You need a constructor to create objects without initialized fields.
”
推荐使用的方式是Native Query(NQ),这是一种非常奇妙且简单的查询方式,我将在后续的文章中介绍nq,,按照Linkin兄的说法“nq搭配c#2.0的泛型和匿名函数,简直是数据查询的绝配”.
4)db4o的插入性能:
我简单测试了一下,看看db4o的插入性能如何,试试插入10万个简单对对象,代码断如下:
1 /// <summary>
2 /// 测试DB4o的插入效率
3 /// </summary>
4 /// <param name="container"></param>
5 private static void TestBatchInsert(ObjectContainer container)
6 {
7 int iBegin = System.Environment.TickCount;
8
9 for (int i = 0; i < 100000; i++)
10 {
11 Entity entity = new Entity(i.ToString());
12 container.Set(entity);
13 }
14
15 // 在我的机器P42.6G, 768Memory上,插入时间为22563ms
16 Console.WriteLine("total time: " + (System.Environment.TickCount - iBegin));
17 }
在我机器(P4 2.6G, 768M内存)上首次插入10万个对象只用)了22s多,很不错.但当第二次插入的时候,却花了>10分钟(没耐心继续等了),大家一起找找原因吧.
5)db4o的查询性能:
采用4)中插入的数据,通过native query的方式查询Name以"1"开头的对象,花了10484ms,返回了1111个对象.
来源:http://hi.baidu.com/component/blog/item/5d48d75861c85381810a1826.html
主要内容:
1、什么是db4o
2、db4o的学习资源
3、db4o: the first step
--------------------------------------------------------------------------------
什么是db4o?
db4o是一种纯对象数据库,相对于传统的关系数据库+ORM,db4o具有以下好处:
1)以存对象的方式存取数据(废话~~,不过你考虑一下完全以对象的方式去考虑数据的存取对传统的数据库设计思维来说是多么大的颠覆);
2)无需数据库服务器,只需要一个数据文件,且dll大小仅为300多k,非常适合作为嵌入式数据库;
3)提供Query By Sample, Native Query和Simple Object DataBase Access(SODA)三种方式进行数据查询,操作简便且功能强大,和sql说byebye.
同时,db4o有.net和java两种版本,.net版本已经支持.net 1.0/1.1/2.0了.
db4o可以在:http://www.db4o.com/default.aspx 下载,最新版本为5.2.同时还有一个叫objectmanager的工具,可用于查看数据文件中保存的对象,不过安装前需要安装jvm.
--------------------------------------------------------------------------------
db4o的学习资源
对于初学者来说,参考db4o的api document和db4o tutorial就够了,这些在安装的时候都已经带了,不用到处找了.另外还可以上db4o的官方forum http://forums.db4o.com/login.aspx?pnr=&ReturnUrl=/forums,人气还可以.
--------------------------------------------------------------------------------
db4o: the first step
今天我只是简单的介绍如何使用db4o实现简单对象的crud操作,并且对db4o的插入和查询效率进行了初步的测试,下一步会进行继续的深入,有兴趣的兄弟可以一块交流,db4o和nhibernate搭配实现orm的确是一套很好的方案.
1、基本概念:
先别去想什么db4o又是一套复杂的开源的东西,今天我们只需要了解com.db4o.ObjectContainer和com.db4o.Db4o两个类
(1)com.db4o.Db4o:db4o类库中的关键类之一,本文中的用途是用com.db4o.Db4o.OpenFile来创建和打开db4o的数据库文件
(2)com.db4o.ObjectContainer:简单点来说,db4o的数据库文件就是一个对象的容器(存储的是对象嘛~~),我们可以通过Db4o::OpenFile来获取指向db4o数据库文件的ObjectContainer,进行所需的存取操作后,调用ObjectContainer::Close()来关闭这一连接.
或许你会说,怎么会那么简单,没错,今天接触db4o的时候就是那么舒服,不用管什么数据库的Schema.
2、简单的db4o的存取操作:
示例如何进行对象的存取操作之前,我们先简单的定义一个对象类,用于db4o的存取.
1 /// <summary>
2 /// 用于测试db4o基本crud操作的对象类
3 /// </summary>
4 public class Entity
5 {
6 private string m_strName;
7
8 public Entity(string strName)
9 {
10 this.m_strName = strName;
11 }
12
13 public string Name
14 {
15 get
16 {
17 return this.m_strName;
18 }
19 set
20 {
21 this.m_strName = value;
22 }
23 }
24 }
1)保存对象:
1 private const string CONST_DEFAULT_DATAFILE = @"c:\db4obasic.yap";
2
3 static void Main(string[] args)
4 {
5
6 // 打开数据文件
7 ObjectContainer container = Db4o.OpenFile(CONST_DEFAULT_DATAFILE);
8
9 try
10 {
11 Entity entity = new Entity("calvin");
12 container.Set(entity);
13 }
14 finally
15 {
16 container.Close();
17 }
18 }
2)删除已有对象:
1 private const string CONST_DEFAULT_DATAFILE = @"c:\db4obasic.yap";
2
3 static void Main(string[] args)
4 {
5
6 // 打开数据文件
7 ObjectContainer container = Db4o.OpenFile(CONST_DEFAULT_DATAFILE);
8
9 try
10 {
11 Entity entity = new Entity("calvin");
12 container.Set(entity);
13
14 IList result = container.Get(entity);
15 container.Delete((Entity) result[0]);
16 }
17 finally
18 {
19 container.Close();
20 }
21 }
3)更新对象
1 private const string CONST_DEFAULT_DATAFILE = @"c:\db4obasic.yap";
2
3 static void Main(string[] args)
4 {
5
6 // 打开数据文件
7 ObjectContainer container = Db4o.OpenFile(CONST_DEFAULT_DATAFILE);
8
9 try
10 {
11 Entity entity = new Entity("foo");
12 container.Set(entity);
13
14 IList result = container.Get(entity);
15 entity = (Entity) result[0];
16 entity.Name = "bar";
17 container.Set(entity);
18 }
19 finally
20 {
21 container.Close();
22 }
23 }
在2)和3)中,我使用了QBE来实现对象的查询,按照db4o官方的说法,用QBE可以快速的实现对象简单查询,但是限制也不少:
“Querying this way has some obvious limitations:
- db4o must reflect all members of your example object.
- You cannot perform advanced query expressions. (AND, OR, NOT, etc.)
- You cannot constrain on values like 0 (integers), "" (empty strings), or nulls (reference types) because they would be interpreted as unconstrained.
- You need to be able to create objects without initialized fields. That means you can not initialize fields where they are declared. You can not enforce contracts that objects of a class are only allowed in a well-defined initialized state.
- You need a constructor to create objects without initialized fields.
”
推荐使用的方式是Native Query(NQ),这是一种非常奇妙且简单的查询方式,我将在后续的文章中介绍nq,,按照Linkin兄的说法“nq搭配c#2.0的泛型和匿名函数,简直是数据查询的绝配”.
4)db4o的插入性能:
我简单测试了一下,看看db4o的插入性能如何,试试插入10万个简单对对象,代码断如下:
1 /// <summary>
2 /// 测试DB4o的插入效率
3 /// </summary>
4 /// <param name="container"></param>
5 private static void TestBatchInsert(ObjectContainer container)
6 {
7 int iBegin = System.Environment.TickCount;
8
9 for (int i = 0; i < 100000; i++)
10 {
11 Entity entity = new Entity(i.ToString());
12 container.Set(entity);
13 }
14
15 // 在我的机器P42.6G, 768Memory上,插入时间为22563ms
16 Console.WriteLine("total time: " + (System.Environment.TickCount - iBegin));
17 }
在我机器(P4 2.6G, 768M内存)上首次插入10万个对象只用)了22s多,很不错.但当第二次插入的时候,却花了>10分钟(没耐心继续等了),大家一起找找原因吧.
5)db4o的查询性能:
采用4)中插入的数据,通过native query的方式查询Name以"1"开头的对象,花了10484ms,返回了1111个对象.
来源:http://hi.baidu.com/component/blog/item/5d48d75861c85381810a1826.html
发表评论
-
期货交易的秘密
2022-09-28 12:31 20期货交易盈利的逻辑,简单来说就是4个字:大赚小亏。 赚钱的时 ... -
一个未了的心结
2022-09-27 14:16 87我有一个未了的心结, 就是攻克癌症, 我后面不管做啥, 挣了钱 ... -
生是一场自我实现的预言
2022-03-15 15:21 0术力之限要靠道力突破, 道力之限要靠心力突破, 人生是一场自我 ... -
人生是一场自我实现的预言
2022-03-15 14:25 473术力之限要靠道力突破, 道力之限要靠心力突破, 人生是一场自我 ... -
物联网大数据平台
2021-01-28 15:29 301TDengine是专为物联网、车联网、工业互联网、IT运维等设 ... -
大数据平台CDH搭建指南
2021-01-28 15:26 278CDH和CM介绍及搭建 http://www.fblinux. ... -
使用Flume+Logstash+Kafka+Spark Streaming进行实时日志处理分析【公安大数据】
2018-09-20 16:53 1129使用Flume+Logstash+Kafka+Spark St ... -
Cloudera Hadoop运维管理与性能调优
2018-09-17 18:53 628Cloudera Hadoop运维管理与性能调优 -
CIO
2018-08-30 11:34 333一个企业的运营过程,不论其身处哪个行业,其实都是一个信 ... -
Hadoop与MPP是什么关系?有什么区别和联系?
2018-08-29 11:17 1586Hadoop与MPP是什么关系?有什么区别和联系? -
大数据资料
2018-05-25 09:44 235大数据资料 -
大数据相关的一些内容和知识
2018-04-22 20:38 347一、大数据通用处理平 ... -
难念的经
2018-03-27 12:13 388“笑你我枉花光心计 爱 ... -
办公室里面小屁就没有掌握自己命运的资格
2018-02-07 10:03 429办公室里面小屁就没有掌握自己命运的资格。 -
一个成熟的自动化运维系统具备什么功能?
2018-02-05 16:57 331一个成熟的自动化运维系统具备什么功能? -
我国“十三五”国家大数据战略离不开专业的数据中心基础设施运维服务
2017-11-21 15:35 469我国“十三五”国家大数据战略离不开专业的数据中心基础设施运维服 ... -
千万级记录的Discuz论坛导致MySQL CPU 100%的优化笔记
2016-07-08 12:15 813千万级记录的Discuz论坛导致MySQL CPU 100%的 ... -
Oralce表被锁了,咋办?
2015-11-02 10:27 6351.下面的语句用来查询哪些对象被锁: select objec ... -
id oracle
2013-11-21 13:14 674SQL> startup ORA-27125: una ... -
一个sql简单关于分组的sql
2013-05-14 16:36 760select * from ( select aa.pe ...
相关推荐
1.介绍了面向对象数据库 db4o 的基本特性,并且与传统关系型数据库以及 OR 映射技术做了比较分析,读者可以体验到 db4o 的全新的面向对象存储的理念,并且给出了性能测试数据。 2.介绍了面向对象数据库 db4o 的安装...
DB4O面向对象数据库使用指南
**对象数据库db4o详解** 对象数据库是一种新型的数据库管理系统,与传统的关系型数据库不同,它直接存储和管理对象,而不是将对象转换为表格形式的数据。db4o(database for objects)是对象数据库的一种,它提供了...
### db4o面向对象数据库教程入门知识点解析 #### 一、db4o简介与特性 - **db4o**:db4o是一款专为Java、.NET和Mono平台设计的开源面向对象数据库系统。它提供了高效的数据存储和检索功能,支持多种数据类型,并且...
Db4o是一个面向对象的数据库系统,由db4objects公司开发,它支持Java和.NET平台,并采用双授权模式,即GPLv2和商业授权。在Android开发中,Db4o提供了一种替代传统关系型数据库如SQLite的方式,尤其是在面对面向对象...
【面向对象的db4o指南】是一篇针对初学者的db4o数据库介绍,该文主要探讨了面向对象数据库db4o的基本特性和优势,并与传统的关系型数据库及ORM(对象关系映射)技术进行了对比分析。db4o是一款开源的对象数据库,它...
db4o 是一个开源的面向对象数据库,能够轻松地将 Java 对象持久化到数据库中。本文将详细介绍 db4o 的安装、启动、查询方式、对象持久化、数据库文件结构、主要包结构等知识点。 一、db4o 安装和启动 db4o 的安装...
Java数据库db4o,全称为“Database for Objects”,是一款开源的对象数据库系统,专门设计用于Java和.NET平台。它提供了一种直接在对象模型上进行数据操作的方式,无需传统的ORM(对象关系映射)层,简化了开发过程...
通过分析源代码(假设项目包含源代码),我们可以深入了解DB4O的工作原理,以及如何在实际项目中应用面向对象数据库来简化数据管理。对于想要探索非关系型数据库和寻求替代传统关系型数据库解决方案的Java开发者来说...
《db4o 权威指南》是一本深入探讨db4o这一开源面向对象数据库系统的专业书籍,对于Java开发者来说尤其有价值。db4o是Database for Objects的缩写,它允许开发者以自然、直观的方式存储和检索Java对象,无需编写SQL...
DB4O是一个开源的面向对象数据库管理系统,特别适合于嵌入式系统。它为Java和.NET平台提供了强大的支持,使得开发者能够轻松地在资源受限的环境中管理和存储数据。 #### 嵌入式系统与数据管理的重要性 随着技术的...
db4o的查询机制基于OQL(Object Query Language),这是一种面向对象的查询语言,允许开发者使用类和对象属性进行查询。OQL可以实现复杂的查询逻辑,比如多条件查询、子查询等。 **4. 内存数据库与持久化** db4o既...
**ObjectManage** 可能是指db4o提供的对象管理功能,它允许开发者以面向对象的方式管理和查询数据,例如,通过方法调用来执行查询,而不是编写SQL语句。 总结来说,"db4o-8.0-java" 是一个完整的db4o对象数据库解决...
DB4O,全称为“Database for Objects”,是一个开源的、基于Java和.NET平台的面向对象数据库系统。它允许开发者直接将Java或.NET的对象存储到数据库中,无需进行SQL映射或者对象关系映射(ORM)。在标题中提到的...
DB4o(Database for Objects)是一款开源的对象数据库系统,它允许开发者直接将对象持久化到数据库中,无需进行额外的映射或者数据访问层(DAL)的开发。这个数据库系统设计的目标是简化对象关系映射(ORM)的过程,...
### db4o面向对象数据库知识点解析 #### 一、db4o简介与特点 db4o是一款完全面向对象的数据库管理系统,它以其简洁高效的特点而受到开发者的喜爱,尤其适用于初学者。作为一款轻量级的对象数据库,db4o支持直接...
**db4o (Database for Objects) 是一个开源的、基于Java和.NET的面向对象数据库系统。它允许开发者直接在数据库中存储和检索Java或.NET对象,而无需传统的SQL查询语言,极大地简化了数据管理和持久化的流程。** 在...