鱼雷遇到解放者 – 红工场LiberatorJDO的Torpedo O/R Mapping性能基准测试

本文主要是介绍鱼雷遇到解放者 – 红工场LiberatorJDO的Torpedo O/R Mapping性能基准测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Torpedo(鱼雷)TorepdoTestbed of Object Relational Products for Enterprise Distributed Objects的简称, 是一个java业界发起,由知名的java质询公司The Middelware Company 研究开发,用于测试对象-关系映射中间件(O/R Mapping Software,也成为数据访问中间件)

性能和优化程度的一个基准测试包。Torpedo包含一个规范,一个用java实现的参考实现( Reference Implementation)。同样的规范可以用CC#实现以测试该中语言中的O/R Mapping软件。

 

Torpedo通过精心设计的一系列模拟真实环境中的读写操作来考察O/R Mapping中间件的复杂度,灵活度的和揭示中间件访问数据库的优化策略,通过这些操作的可比结果来衡量O/R Mapping中间件的整体性能和结构设计的优劣。

 

近年面向对象的开发已经普及,导致新兴的O/R Mapping开发工具也日益增多,包括Enterprise Java Bean中的CMPJDOHibernate, OralceTopLink, Coocobase等众多的O/R Mapping中间件和标准的问世,人们越来越需要一个业界测试指标来评估各种的数据访问中间产品,Torpedo正是在业界的这种需求下诞生。

 

Liberator JDO是由北京红工场软件技术有限公司历近一年时间开发的中国第一个基于POJO模型的O/R Mapping中间件,目前实现了JCPJDO2Java Data Object 2)标准的,并会在2006年第一个季度实现EJB3接口和准备实现下一代的业界标准数据持久层API Liberator JDO是一个坚实的数据访问中间件,可以作为数据持久层来大量节省项目的开发时间(30%-50%),提高开发效率,提升应用的质量和稳定性。

 

为了检验Liberator JDO的性能和设计,我们也把Torpedo作为Liberator JDO的测试基准包。通过Torpedo的测试一来保证产品性能和质量,二来也和国外的产品对比,找出弱点,超越对手。

 

首先看看测试结果:

 

测试结果

总数

A

B

C

D

E

F

G

H

Liberator PE 1.2 Beta

24

2

2

2

2

2

2

5

7

A-     listAuction; B-listAuctionTwiceWithTransaction; C-listAuctionTwiceWithoutTransaction; D-findAllAuctions; E-findHighBids; F-listPartialAuction; G-placeBid; H-place2Bids

 

其他国外同类产品包括weblogic, Toplink, Hibernate, Kodo, JDOGenie等的测试结果:

Submission

Sum

A

B

C

D

E

F

G

H

hibernate-2

34

3

5

6

2

3

2

5

8

hibernate-3

22

2

2

2

2

2

2

4

6

jcredo-1

17

2

2

2

3

2

2

2

2

kodo-3

22

2

2

2

2

2

2

4

6

kodo-4

21

2

2

2

2

2

2

4

5

kodo-5

16

2

2

2

2

2

2

2

2

openaccess-1

16

2

2

2

2

2

2

2

2

toplink-1

97

18

18

18

22

3

3

6

9

toplink-2

30

3

3

3

3

2

2

6

8

toplink-3

21

2

2

2

2

2

2

4

5

weblogic-1

113

18

18

36

22

3

3

5

8

weblogic-2

26

2

2

2

2

3

2

5

8

weblogic-3

20

2

2

2

2

2

2

3

5

测试结果可以看到看到厂商都很在意测试指标,对自己的产品和torpedo代码进行优化以期在测试中获得优秀的成绩。红工场的Liberator PE在不优化Torpedo的代码的情况下获得很好的成绩,超过了大部分未经优化的其他同类产品的性能指标,和优化后的其他国外厂商的产品在一个数量级上(所有优化后的产品都是在今年夏天后才测试的)。因此Liberator PE不仅仅在性能和设计不逊色于国外的同类产品,在时间上也紧逼业界最领先的国外同行。

 

现在我们来看看Torepdo到底是测试些什么,和如何侧测试O/R Mapping中间件的。

 

Torpedo主要测试在O/R Mapping中间件中以下的数据库访问策略。

 

只读对象(Read only objects)   很多应用大部分的操作都是只读的。聪明的O-R mapping软件应该能够利用这种行为来优化对哪些只读对象的访问。例如,这些数据很容易被缓存并且能够在缓存中存在比较长的时间。

 

事务内缓存(Caching within a transaction)   O/R Mapping中间件应该可以在单个事务的边界内缓存操作的对象,对这些对象的操作应该不需要操作数据库,所有的针对数据库插入更新操作都应该是在事物提交的时候才执行。

 

跨多个事务的缓存(Caching across transactions)   虽然在事务的边界内缓存数据可以提供一些好处,跨事务的缓存却能够提供更大的好处。数据不会在并发事务的过程中被重新加载。数据库只会以写操作方式被访问,当数据被修改的时候,对O-R mapping软件来说这是一个具有挑战性的优化操作,尤其是支持在集群环境下或者通过其他非O-R mapping的程序访问数据。

加载对象的部分数据(Partial load of object data)    O-R mapping实例化一个对象的时候,有时只加载这个对象的部分数据比加载所有的更好一些。聪明的O-R mapping软件只加载那些需要的对象数据而不是所有的,这样能够保存在内存资源中提供给应用程序使用。

 

批量加载多个对象(Bulk loads of multiple objects)    当查询的结果是对象的集合时,通过一次数据库操作加载所有的结果对象比一个一个的加载更好。更进一步的做法是只加载这批结果对象中的一部分

 

懒惰加载多个对象(Lazy loads of multiple objects)   有时不加载所有的查询结果对象要好一些,更合适的做法是只加载满足基本需要的结果对象。

 

 

批量加载被关联对象(Bulk loads of related objects)    当一个面向对象应用程序的一个对象关联另一个对象时,有时通过一次数据库操作就能够加载所有的被关联对象是很有价值的。更进一步的做法是只加载这批被关联对象中的一部分。

 

懒惰加载被关联对象 (Lazy loads of related objects)有时不加载所有的被关联对象要好一些,更合适的做法是只加载满足基本需要的被关联对象。

 

批量更新操作(Batch update operations)    相对于在事务过程中频繁执行更新/插入数据库的操作,O-R mapping软件选择了更好的方式,在一次数据库操作中批量的执行更新/插入操作。

 

Torepdo的参考实现中,通过一个典型的机遇J2EE架构的拍卖应用来检验上述数据库访问优化策略在O/R Mappping中间件中的实现。Torepdo的对象模型如下图:




对象模型由
AuctionBidUserItem组成。在这些对象之间有四种不同的关系。AuctionItem之间是一对一的关系,AuctionBid之间是一对多的关系,一个UserAuction之间是一对多的售货关系。一个UserBid之间是一对多的买主关系。

 

基准测试包含9个测试用例,覆盖了所有上述的优化策略:

ListAuction

listAuction操作揭示了O-R mapping软件多么善于通过关联对象找到数据,特别是能够揭示O-R mapping软件是否能够批量加载被关联对象(Eager Fetching),所有这些信息可以通过一个单独的SQL join statement获得。

 

ListAuctionTwiceWithTransaction

listAuctionTwiceWithTransaction操作揭示了O-R mapping软件是否能在事务的边界内缓存数据

 

ListAuctionTwiceWithoutTransaction

测试能否跨事务缓存,也测试O-R mapping软件是否支持只读对象的智能管理,第一次访问auctionbiduseritem的信息被放入缓存中,第二次只会去访问缓存,因为这些对象被声明为是只读的。

 

ListPartialAuction

listPartialAuction 操作测试O-R mapping软件能够加载对象数据的一部分。listPartialAuction也测试了O-R mapping软件能够用懒惰的方式加载被关联对象。被关联的userbid对象的信息不是必需的。

 

 

FindAllAuctions

FindAllAuctions操作测试O-R mapping软件能够执行批量加载多个对象和懒惰加载。当返回大量数据的时候,这个测试O-R mapping软件呈现批量结果的能力。

 

 

FindHighBids

FindHighBids操作测试O-R mapping软件执行批量加载多个对象的能力。它也测试O-R mapping软件的查询语言对合计功能的支持。如果缺少支持,必须要在应用程序中找到最高的出价而不是数据库中。

 

 

PlaceBid

测试在同步添加出价信息的时候,placeBid操作测试各种列表和查找操作的正确性。并发执行placeBid操作时,所有的操作必须返回正确的响应。

 

Place2Bids

place2bids 操作测试 O-R mapping 软件批量更新 / 插入数据库的能力, place2bids 作为一个独立的原子事务运行。

这篇关于鱼雷遇到解放者 – 红工场LiberatorJDO的Torpedo O/R Mapping性能基准测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/282778

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

黑神话,XSKY 星飞全闪单卷性能突破310万

当下,云计算仍然是企业主要的基础架构,随着关键业务的逐步虚拟化和云化,对于块存储的性能要求也日益提高。企业对于低延迟、高稳定性的存储解决方案的需求日益迫切。为了满足这些日益增长的 IO 密集型应用场景,众多云服务提供商正在不断推陈出新,推出具有更低时延和更高 IOPS 性能的云硬盘产品。 8 月 22 日 2024 DTCC 大会上(第十五届中国数据库技术大会),XSKY星辰天合正式公布了基于星

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法

最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如下: 1、问题及过程: (myenv) D:\Workspace\python\XXXXX>conda install python=3.6.13 Solving environment: done.....Proceed ([y]/n)? yDownloa

PR曲线——一个更敏感的性能评估工具

在不均衡数据集的情况下,精确率-召回率(Precision-Recall, PR)曲线是一种非常有用的工具,因为它提供了比传统的ROC曲线更准确的性能评估。以下是PR曲线在不均衡数据情况下的一些作用: 关注少数类:在不均衡数据集中,少数类的样本数量远少于多数类。PR曲线通过关注少数类(通常是正类)的性能来弥补这一点,因为它直接评估模型在识别正类方面的能力。 精确率与召回率的平衡:精确率(Pr