性能优化总结(三):聚合SQL在GIX4中的应用

本节主要介绍,在GIX4系统中,如何应用上篇讲的方案来改善性能,如果与现有的系统环境集成在一起。大致包含以下内容:

SQL的生成

映射-数据读取方案

工厂方法-接口的命名约定

实例代码

SQL生成

GIX4系统中的所有领域模型及分布式访问机制,使用CSLA作为底层框架。而ORM机制,使用了一个非常轻量级的开源代码LiteORM实现。 模型类的定义,采用以下的格式:

可以看到,在类的元数据定义中(这里目前使用的是Attribute的形式),已经包含了对应数据表和列的信息。所以为SQL的自动化自成 提供了一定的支持。

其实,由于目前对性能要求比较高的模块少,所以用于优化查询的SQL主要还是依靠人工手写。但是由于LiteORM框架的功能比较有限, 所以这里查询出来的表格数据需要由我们自己来进行读取并封装对象。考虑到:1. 多表连接时,列名可能会重复;2. 添加/删除列时,不 要更改手写的SQL。所以至少列名应该自动生成,并不重复。我们把生成列名SQL的API都放在了所有模型的基类GEntity<T>中,如下 :

[Serializable] 
   public abstract class GEntity<T> : Entity<T>
     where T : GEntity<T>
   {
     #region 直接与数据行进行交互


/// <summary>
/// 直接从数据集中取数据。
///
/// 注意:
/// 数据集中的列字段约定为:“表名_列名”,如“PBS_Name”。
/// 默认使用反射创建对象并读取数据!同“LiteORM”。
///
/// 意义:
/// 由于各个类的列名不再相同,所以这个方法的意义在于可以使用一句复杂的组合SQL加载一个聚合对象!
/// </summary>
/// <param name="rowData">
/// 这个数据集中的列字段约定为:“表名_列名”,如“PBS_Name”。
/// </param>
/// <returns>
/// 如果id值为null,则返回null。
/// </returns>
public static T ReadDataDirectly(DataRow rowData)

/// <summary>
/// 获取可用于ReadDirectly方法读取的列名表示法。如:
/// PBS.Id as PBS_Id, PBS.Name as PBS_Name, ........
/// </summary>
/// <returns></returns>
public static string GetReadableColumnsSql()

/// <summary>
/// 获取可用于ReadDirectly方法读取的列名表示法。如:
/// p.Id as PBS_Id, p.Name as PBS_Name, ........
/// </summary>
/// <param name="tableAlias">表í的?别e名?</param>
/// <returns></returns>
public static string GetReadableColumnsSql(string tableAlias)

/// <summary>
/// 获取columnName在DataRow中使用时约定的列名。
/// </summary>
/// <param name="columnName"></param>
/// <returns></returns>
public static string GetReadableColumnSql(string columnName)

public static ITable GetTableInfo()
{
   //这里加载表信息时,可能需要和服务器交互。
   if (Helper.IsOnServer())
   {
     return GetTableInfo_OnServer();
   }
   else
   {
     return GetTableInfo_OnClient();
   }
}

#endregion

时间: 2024-06-11 19:23:01

性能优化总结(三):聚合SQL在GIX4中的应用的相关文章

Oracle SQL性能优化系列学习三_oracle

正在看的ORACLE教程是:Oracle SQL性能优化系列学习三.8. 使用DECODE函数来减少处理时间  使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表.  例如:  SELECT COUNT(*),SUM(SAL) FROM EMP  WHERE DEPT_NO = 0020  AND ENAME LIKE 'SMITH%';  SELECT COUNT(*),SUM(SAL)  FROM EMP  WHERE DEPT_NO = 0030  AND ENAME LIKE

ORACLE SQL性能优化系列 (三)

oracle|性能|优化   8.       使用DECODE函数来减少处理时间   使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表.   例如:    SELECT COUNT(*),SUM(SAL)    FROM EMP    WHERE DEPT_NO = 0020    AND ENAME LIKE 'SMITH%';      SELECT COUNT(*),SUM(SAL)    FROM EMP    WHERE DEPT_NO = 0030    AND EN

后端系统性能优化(三) sql优化

昨天我为大家介绍了如何去发现坏代码,如何优雅的去实现一个应用内的监控程序.当然发现了坏代码之后,我们还是要想办法来改掉它,也许它会很顽固.今天说说性能优化的一个非常重要的部分:sql的优化 今天要说的不是怎么来写优秀的,性能好的sql,这些DBA们会比我更加专业.在我们公司,凡是DBA能优化的sql,DBA都在内部消化了,需要反馈给我们的,说明他们可能也束手无策.也是我们该出手的时候了. insert,update这类型的sql,性能一般不会太慢,我把这其中可能出现的问题糅合在一个例子中,组成这

数据库性能优化分析案例---解决SQL语句过度消耗CPU问题

解决|数据|数据库|问题|性能|优化|语句 问题描述:10月25日上午滨州网通的工程师报告OSS应用系统运行缓慢,具体操作是通过OSS系统查询话单,很长时间才能返回结果,严重影响了客户的正常使用. 问题处理:1.登陆数据库主机,用sar命令看到idle的值持续为0,CPU的资源已经耗尽: bz_db1# sar 2 4 SunOS kest 5.8 Generic_108528-19 sun4u    10/26/04 10:56:46    %usr    %sys    %wio   %id

HTTP/2 与 WEB 性能优化(三)

在连续写了两篇关于「HTTP/2 与 WEB 性能优化」的文章后,今天来写这个系列的最后一篇.在正式开始之前,我们先来简单回顾下之前两篇文章: 「HTTP/2 与 WEB 性能优化(一)」的结论是:HTTP/2 的 Server Push 机制,可以让重要的 JS.CSS 等资源尽快加载,从而不再需要 HTTP/1 中「将重要资源内联在页面头部」的优化方案了. 「HTTP/2 与 WEB 性能优化(二)」的结论是:HTTP/2 支持了多路复用,HTTP 连接变得十分廉价,之前为了节省连接数所采用

JVM性能优化(三):垃圾收集

原文地址,译文地址,译者:Greenster Java平台的垃圾收集机制显著提高了开发者的效率,但是一个实现糟糕的垃圾收集器可能过多地消耗应用程序的资源.在Java虚拟机性能优化系列的第三部分,Eva Andreasson向Java初学者介绍了Java平台的内存模型和垃圾收集机制.她解释了为什么碎片化(而不是垃圾收集)是Java应用程序性能的主要问题所在,以及为什么分代垃圾收集和压缩是目前处理Java应用程序碎片化的主要办法(但不是最有新意的). 垃圾收集(GC)的目的是释放那些不再被任何活动对

前端性能优化(三)——传统 JavaScript 优化的误区

注:本文是纯技术探讨文,无图无笑点,希望您喜欢 一.前言 软件行业极其缺乏前端人才这是圈内的共识了,某种程度上讲,同等水平前端的工资都要比后端高上不少,而圈内的另一项共识则是--网页是公司的脸面! 几年前,谷歌的一项统计表明,如果亚马逊页面加载每慢 100ms,将影响他们 1% 的收入:如果谷歌页面加载慢 500ms,流量将锐减 20%,这个数据现在必将更加恐怖! 在前端高性能优化(一).(二)中,笔者介绍了一些关于前端优化的技术,这些技术都依赖于前人的辛苦努力,但我们仍要明白的是,前端的情况十

[Unity 3D] Unity 3D 性能优化(三)

CenterOfMass 在处理物理碰撞时,尤其是OnTrigger族消息,由于要手动计算碰撞点会经常要用到碰撞体的质心.获取质心常用的有三种方式: 1.Collider.bounds.center 2.Collider.rigidbody.worldCenterOfMass 3.Collider.attachedRigidbody.worldCenterOfMass 第一种方式其实是认为碰撞体是均匀几何体,所以取碰撞盒中心作为质心.注意,这里的Collider并不是collider属性,而是表

【性能优化】CBO,RBO在ORACLE 10g 中的应用

奇怪的执行计划 10g 开始 oracle 就默认使用cbo 来代替rbo 来选择合适的执行计划,但是今天遇到的一个例子,有点例外: SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64biPL/SQL Release 10