zoukankan      html  css  js  c++  java
  • 数据访问组件性能

    “啊!你在用ORM?会不会性能很差啊?”
    用数字来说话,打破模糊的、传言的印象。

    标题提到的组件的增删改查的测试都实现了测试代码,所以除了测试外,也可以把此项目作为各个组件的入门参考demo。 

    源码下载:https://github.com/alifellod/DbAccessLibTest/archive/master.zip

    git地址:https://github.com/alifellod/DbAccessLibTest  欢迎园友贡献改进代码。

    项目使用的是.Net Framework 4.0可以使用2010或2012打开。

    默认测试数据库使用SqlServer 

    测试前,请先创建数据表Test(使用名为Test的数据库,如果不用这个数据库,请更改数据库连接字符串)

     View Code

    测试前清表:truncatetable Test
    默认连接字符串是:Data Source=.;Initial Catalog=Test;Integrated Security=True

    此程度测试代码使用了接口规范,并没有为了省事耦合在程序里,因此编写修改测试代码非常简单,所以也希望各位园友自己写上一段测试测试。
    由于这些组件基本都是第一次使用,所以可能导致部分组件测试代码编写并不合理,敬请指点。
    注意:各组件的测试均采用一样的测试思路,也即ORM对ORM,SQL对SQL,循环也是一样的循环。
    不必拘泥于15和23的区别,而且要区别10和100的区别,也就是在一个数量级别之间比较。
    线程我分别写了Task、ThreadPool和Thread的执行方式,根据自己的喜欢选择。

    Task可以很好的取消创建的线程,ThreadPool测试会较为稳定,Thread很容易导致SQL连接池爆破。
    测试之前,先预热一下——各个组件进行一定数量执行查询。
    先看两张测试图。

     

     

    数据格式:平均值-最高值-最低值
    测试顺序:增、改、删
    100“线程” 查询10次 增删改
     

     

    ClownFish

    Moon

    PDF

    23-96-2

    21-76-6

    8-25-4

    16-49-2

    15-37-5

    4-18-2

    46-116-3

    23-56-3

    7-33-3

     

    CYQOrm

    EFOrm

    MoonOrm

    MySoftOrm

    NHibernateOrm

    PDFOrm

    XCodeOrm

    419-560-311

    23-71-8

    10-64-3

    46-102-24

    21-47-7

    12-31-4

    15-60-9

    889-1611-493

    61-137-17

    10-29-3

    41-267-15

    41-103-9

    20-54-3

    340-623-173

    428-1112-255

    37-113-15

    5-15-2

    110-195-52

    37-128-7

    17-50-3

    364-476-246


    1000“线程” 查询10次增删改

     

    ClownFish

    Moon

    PDF

    9-276-2

    13-49-2

    7-44-3

    22-125-2

    7-43-3

    9-41-3

    20-299-2

    10-123-3

    8-66-2

     

    CYQOrm

    EFOrm

    MoonOrm

    MySoftOrm

    NHibernateOrm

    PDFOrm

    XCodeOrm

    591-1376-227

    29-306-9

    6-52-3

    50-386-11

    12-259-4

    10-48-3

    14-231-8

    680-1107-382

    43-321-11

    14-95-2

    78-386-13

    45-237-7

    22-90-4

    362-729-177

    553-867-233

    59-334-12

    27-215-14

    106-647-18

    42-294-4

    17-128-3

    410-755-199


    查询测试,数据行100W
    100“线程” 查询返回Top 100
    使用没有索引的列RowId排序

     

    ClownFish

    Moon

    PDF

    2-19-1

    1-9-0

    1-47-0

    查询采用的根据组件提供的分页或者Top查询功能。
    使用没有索引的列RowId排序

     

    CYQOrm

    EFOrm

    MoonOrm

    MySoftOrm

    NHibernateOrm

    PDFOrm

    XCodeOrm

    3975-5133-267

    1452-3668-735

    5230-8032-3241

    1287-1670-240

    3372-6264-954

    2629-3825-836

    1696-5363-716

    使用有索引的列Guid排序

     

    CYQOrm

    EFOrm

    MoonOrm

    MySoftOrm

    NHibernateOrm

    PDFOrm

    XCodeOrm

    16-32-13

    5-8-3

    5967-14644-1639

    2-5-1

    7-127-2

    1-17-0

    1-9-0

    经过测试,发现线程越多,越容易出现问题“超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。”导致访问很不稳定。
    一个好的数据访问层应该是可以优雅的接受并处理大并发的访问,而不应该仅仅只盯住表面上的测试数据。
    整个程序框架设计良好是更应该花更多心思考虑的。
    从上面也可以看到,ORM性能其实并没有一般人想象的那么糟糕。

    最后看看程序的代码是怎么样的。

    项目目录

    测试代码接口

     View Code

    ClownFish-SQL测试代码

     View Code
    Moon-SQL测试代码
     View Code

    PDF-SQL测试代码

     View Code

    CYQ-ORM测试代码

     View Code

    EF-ORM测试代码

     View Code

    Moon-ORM测试代码

     View Code

    MySoft-ORM测试代码

     View Code

    NHibernate-ORM测试代码

     View Code

    PDF-ORM测试代码

     View Code

    XCode-ORM测试代码

     View Code

    测试耗时监控

     View Code

    测试完整逻辑代码 ,300多行,慎点。

     View Code

     
    到底是选择ORM而不写Sql,还是 为了追求性能,而避开ORM,就看自己的情况来取舍了。 

    选择一个组件的时候,可以考虑这几方面:稳定性、性能、易用性、是否保持更新、是否有较好的文档手册、使用者社区怎么样、是否开源

    上面提供的组件测试代码也可以看到这些组件的代码风格,喜欢语法糖的不妨好好看看,到底更喜欢哪种风格。

    综合考虑选择。 

    各组件地址
    ClownFish:http://www.cnblogs.com/fish-li/ 【不开源】仅此一个是非ORM的。
    CYQ:http://www.cnblogs.com/cyq1162/ 【逐版本开源】
    EF: https://entityframework.codeplex.com/ 【开源】
    Moon:http://www.cnblogs.com/humble/ 【不开源】
    MySoft:http://www.cnblogs.com/maoyong/archive/2010/03/01/1675730.html 【逐版本开源】
    NHibernate:http://nhforge.org/ 【开源】
    PDF:http://home.cnblogs.com/u/bluedoctor/ 【开源】
    XCode:http://xcode.codeplex.com/ 【开源】
    希望更多的园友分享或开源自己所能知道的心爱的数据访问组件。

    小广告:广州有工作机会的,烦请推荐。

    作者: 火地晋 
    出处: http://yelaiju.cnblogs.com 
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    zyUpload+struct2完成文件上传
    js表单动态添加数据并提交
    Hibernate注解
    ueditor的配置和使用
    设计模式
    静态Include和动态Include测试并总结
    java笔试题
    perf使用示例1
    perf 简介
    ss简单使用
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3216577.html
Copyright © 2011-2022 走看看