当前位置:首页 » 网页前端 » 前端解决批量数据注入
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

前端解决批量数据注入

发布时间: 2023-08-04 11:27:46

‘壹’ 几个有效的前端数据处理的方法

一、JSON对象过滤数据(处理复杂数据时可以直接在内部过滤掉)

封装方法:

function  getTargetObject(targetObject, propsArray){if(typeof(targetObject) !=="object"|| !Array.isArray(propsArray)) {thrownewError("参数格式不正确"); }constresult = {};Object.keys(targetObject).filter(key=>propsArray.includes(key)).forEach(key=>{ result[key] = targetObject[key]; })returnresult;}

使用方法:

let arr = {a: '1', b:'2', c: '3'}

getTargetObject(arr, ['a', 'b'])

引用网站: https://segmentfault.com/q/1010000016133960/a-1020000016134570

二、数组切割(当后端传来数据过多的时候,将数据切成几个等分,用户下拉的时候再展示)

 * 将一个数组分成几个同等长度的数组   * array[分割的原数组]   * size[每个子数组的长度]

 */functionsliceArray(array, size) {

    varresult = [];

    for(varx = 0; x < Math.ceil(array.length / size); x++) {

        varstart = x * size;

        varend = start + size;

        result.push(array.slice(start, end));

    }  returnresult  }

引用网站: https://..com/question/941679549069381612.html?fr=iks&word=js%CA%FD%D7%E9%C7%D0%B7%D6&ie=gbk

三、数据过滤(使用JSON.stringify方法)

   数据:   persons: [

                      {apple: '苹果'},

                      {watermelon: '西瓜'},

                      {lemon: '柠檬'},

                      {Blueberry: '蓝莓'},                        

                      {orange: '橙子'}],

方法: handChange() {    

                  let oneFruits = JSON.stringify(this.persons, function (inx, ite) {

                    if (inx === 'watermelon' || inx === 'orange') {

                        return undefined

                    } else {

                        return ite } })

                  this.persons = JSON.parse(oneFruits) }

结果:

四、通过$set给数据注入值并更新视图(解决在vue中新增数据不更新视图的问题)

数据:     persons: [

                        {id: '1',name: '苹果'},

                        {id: '2',name: '西瓜'},

                        {id: '3',name: '柠檬'},

                        {id: '4',name: '蓝莓'} ]

方法:       handChange() {    

                    let oneFruits = JSON.parse(JSON.stringify(this.persons[0])) 

                    let twoFruits = JSON.parse(JSON.stringify(this.persons[1])) 

                    let newFruits = {id: '5', name: '葡萄'}

                    console.log(twoFruits)             

                    this.$set(this.persons, 1, oneFruits) // 将西瓜的位置放上苹果 

                    this.$set(this.persons, 0, twoFruits) // 将苹果的位置方式西瓜

                    this.$set(this.persons, 4, newFruits) // 添加葡萄并更新视图

                    console.log(this.persons) }

结果:

‘贰’ 怎么检测网站存在注入漏洞 防注入有哪些解决办法

关于如何防止sql注入攻击,我们从以下几点开始入手:册陪友
1、首先我们可以了解到sql注入攻击都是通过拼接的方式,把一些恶意的参数拼接到一起,然后在网站的前端中插入,并执行到服务器后端到数据库中去,通常我们在写PHP网站代码的时候会将get ID这个参数值获取到后直接拼接到后端服务器中去,查询数据库,但是如果拼接了一些恶意的非法参数,那么久可以当做sql语句来执行,如果防止sql注入呢?
2、为了防止网站被sql注入攻击,我们应该从一开始写代码的时候就应该过滤一些sql注入的非法参数,将查询的一些sql语句,以及用户输入的参数值都以字符串的方式来处理,不论用户输入的什么东西,在sql查询的时候只是一段字符串,这样构造的任何恶意参数都会以字符串的方式去查询数据库,一直恶意的sql注入攻击就不会被执行,sql注入语句也就没有效果了,再一个就是网站里的任何一个可以写入的地方尽可能的严格过滤与限制,漏下一个可以输入的地方网站就会被攻击,网站就会被黑,所有做的网站安全就会没有效果,包括一些get,post,cookie方式的提交都是不可信的,像数据表里州槐referer user-agent等字段都是可以伪造,写入sql注入语句的,像前端时间爆发的ecshop漏洞利用的就是user.php,伪造referer参数进行了sql注入,执行了远程代码。

3、再一个防止sql注入的方法就是开启PHP的魔术配置,开启安全配置模式,将safe_mode开启on.以及关闭全局变量模式乱郑,register_globals参数设置为on,magic_quotes_gpc参数开启。

‘叁’ 如何高效实现批量插入数据,并去重

c#,sqlserver。写一下我将前端获取到的缓存数据批量插入数据库的表。
在sqlserver数据库下,展开(可编程性)-->(类型)-->(用户自定义表类型)。建一个自定义表类型,表类型结构即是前端传过来的表格数据结构。例如:
CREATE TYPE [dbo].[DT_SAP_ASN] AS TABLE(
[GUID] [nvarchar](50) NULL,
[VBELN_SIP] [nvarchar](30) NULL,
[POSNR_SIP] [nvarchar](30) NULL
)
GO
然后再写个存储,用于调用此存储批量将前端传入的datatable缓存数据批量插入数据库的某个表。例如:
CREATE PROC [dbo].[SP_EDI_SAP_ASN]
(
@DT_SAP_ASN DT_SAP_ASN READONLY --输入参数,刚刚自定义的表类型
)
AS
BEGIN
SET NOCOUNT OFF
INSERT INTO dbo.EDI_ASN_Log
( ID ,
GUID ,
VBELN_SIP ,
POSNR_SIP ,
)
SELECT NEWID() ,
GUID ,
VBELN_SIP ,
POSNR_SIP
FROM @DT_SAP_ASN
SET NOCOUNT ON
END
当然,去重的话在inset那边select表#DT_SAP_ASN distinct一下即可

‘肆’ 针对前端大数据量处理(如10W+)

一般对两个数组做做交集和并集处理用遍历方法一般就是通过遍历for等方法,但是如果遇到大数据量(10万条数据)就会用到很长的时间和耗费内存,因为javascrip为单线程,会影响到用户的体验和页面渲染、逻辑处理等问题!

使用定时器去让大数据遍历的时候能分成很多个异步方法(每个异步方法去遍历大数据数组的一部分数据)去执行,互相也不影响,并监听到所有异步方法执行完成再进行下一步处理!岂不美滋滋!

之前方法

使用for循环一次性遍历0W条数据来查找交集和并集,发现使用的时间能达到10S左右(相当影响体验感受和逻辑处理)

方法优化 DataProcessing 类

// 测试数据

63毫秒! 可以对DataProcessing进行更多的扩展!

多学习、多看报、多运动,不对的地方望指出来,谢谢

‘伍’ web前端如何安全使用innerhtml、document.write以防止程式码嵌入

web前端如何安全使用inner、document.write以防止程式消岩竖码嵌入

先对传入引数进行特殊符号替换,然后再进行write或赋值给innerHTML。
需要替换的符号主要有:单引号、双引号、小于号、大于号等。
替换成显示效果相枣陵同的编码即可。可以用 &#xxx;形式的编码,或者& lt ;这种特定编码。

web前端怎么防止程式码注入攻击

三种方式:

一,HTML防注入。
一般的注入都是在字串中加入了标签,用下JAVA程式码可以去掉这部分程拿大式码。
程式码如下,自己封装成方法即可。
String msge = "asdasdasdasd <div id="f">asdfsdf";
System.out.println(msge);
msge = msge.replace("&", "&");
msge = msge.replace("<", "<");
msge = msge.replace(" ", " ");
msge = msge.replace(">", ">");
msge = msge.replace(""", """);
msge = msge.replace("'", "&qpos;");
System.out.println(msge);
二、防SQL注入
最简单最容易的是限制使用者输入。
简单点的就是不允许使用者输入单引号 和 --,因为单引号号--在SQL中都是影响执行的。
但SQL注入是多方面的,防止的方法也有很多种。
1、位址列禁止特殊字符防SQL注入
把特殊字符(如and、or、'、")都禁止提交就可以防止注入了。
2、php过滤字串,防止SQL注入
批量过滤post,get敏感资料
$_GET = stripslashes_array($_GET);
$_POST = stripslashes_array($_POST);
资料过滤函式
function stripslashes_array(&$array) {
while(list($key,$var) = each($array)) {
if ($key != 'argc' && $key != 'argv' && (strtoupper($key) != $key || ''.intval($key) == "$key")) {
if (is_string($var)) {
$array[$key] = stripslashes($var);
}
if (is_array($var)) {
$array[$key] = stripslashes_array($var);
}
}
}
return $array;
}
3、替换HTML尾标签
function lib_replace_end_tag($str)
{
if (empty($str)) return false;
$str = specialchars($str);
$str = str_replace( '/', "", $str);
$str = str_replace("\", "", $str);
$str = str_replace(">", "", $str);
$str = str_replace("<", "", $str);
$str = str_replace("<SCRIPT>", "", $str);
$str = str_replace("</SCRIPT>", "", $str);
$str = str_replace("<script>", "", $str);
$str = str_replace("</script>", "", $str);
$str=str_replace("select","select",$str);
$str=str_replace("join","join",$str);
$str=str_replace("union","union",$str);
$str=str_replace("where","where",$str);
$str=str_replace("insert","insert",$str);
$str=str_replace("delete","delete",$str);
$str=str_replace("update","update",$str);
$str=str_replace("like","like",$str);
$str=str_replace("drop","drop",$str);
$str=str_replace("create","create",$str);
$str=str_replace("modify","modify",$str);
$str=str_replace("rename","rename",$str);
$str=str_replace("alter","alter",$str);
$str=str_replace("cas","cast",$str);
$str=str_replace("&","&",$str);
$str=str_replace(">",">",$str);
$str=str_replace("<","<",$str);
$str=str_replace(" ",chr(32),$str);
$str=str_replace(" ",chr(9),$str);
$str=str_replace(" ",chr(9),$str);
$str=str_replace("&",chr(34),$str);
$str=str_replace("'",chr(39),$str);
$str=str_replace("<br />",chr(13),$str);
$str=str_replace("''","'",$str);
$str=str_replace("css","'",$str);
$str=str_replace("CSS","'",$str);
return $str;
}
三、专业的事情交给专业的工具去做。
安装安全软体。例如,在服务器中安装“服务器安全狗”,可以设定防注入,防攻击的设定,只要设定好安全规则,就可以遮蔽大多数攻击入侵。

如何安全使用免费wifi防止网银被盗

其实大多WIFI都是安全的,有些连线WIFI后网银被盗了,是因为他们连线的本身是黑客提前建立的虚假WIFI,所以连线后被骗子读取了个人资讯,导致自己的网银被盗,我们想要安全的连线WIFI,首先我们要准确识别这个WIFI是否是商家提供的,另外最好在自己手机上装安全软体,例如腾讯手机管家,它可以自动检测当前网路环境是否安全,这样就可以避免连线到黑客建立的虚假WIFI了。

如何安全使用QQ邮箱,防止隐私泄露

不接受垃圾档案,下载个 QQ安全管家,登陆 QQ 邮箱需要动态验证码或者是在Q安全管家的扫一下二维码登陆比较安全一点

前端如何防止恶意注入

通过js程式码过滤传入后台的资料,加入过滤器filter的使用等

如何安全使用PQMagic?

想要安全的使用分割槽软体,首先要非常熟悉该工具是使用方法,每个功能是干嘛用的一定要弄清楚,在使用之前自己也要有一个准确的目标,自己该分几个区,每个区的大小是多少等等.
PQMagic可以说是一款非常优秀的分割槽软体,建议你去网上找找这方面的教程,有很多,一学就会,祝您好运!

如何安全使用Wifi

腾讯WiFi管家是腾讯公司旗下的的一款免费WiFi管理软体,支援上亿公共WiFi热点,无需输入密码就可一键连线,并通过腾讯五星WiFi标准对这些热点进行全方位的安全、连线速度、网路质量等进行全面评估,确保无僵尸、风险、虚假WiFi。"腾讯WiFi管家"的免费WiFi热点主要为公共WiFi、总数超过1亿,无论您在哪都可以搜寻附近的免费WiFi,并一键连线上网。而且自带wifi安全扫描功能,自动排除僵尸、钓鱼、盗号、木马等病毒,全方位保护您的网路安全。

Ajax如何安全使用

ajax只是一种请求方式,安全不安全是在服务端。并不在他请求的方式。
容易犯的错误是容易被假冒身份。因为普通的request会把cookie一起传送给服务器,但是ajax用的xmlrequest不会自动和cookie一起传送,所以如果不记着在每次处理xhr的时候手动验证cookie的话,很有可能被坏人假冒已经登陆的使用者的身份。

如何安全使用fineui editor

View Raw Code
当前路径:FineUI.Examples/form/editor.aspx <%@ Page Language="C#" ValidateRequest="false" AutoEventWireup="true" CodeBehind="editor.aspx.cs"

Inherits="FineUI.Examples.form.editor" %>
<!DOCTYPE >

<>

<head runat="server">

<title></title>

<link href="../css/main.css" rel="stylesheet" type=text/css />

</head>

<body>

<form id="form1" runat="server">

<x:PageManager ID="PageManager1" runat="server" />

<x:SimpleForm ID="SimpleForm1" BodyPadding="5px" EnableBackgroundColor="true" runat="server"

Title="表单" Width="750px">

<Items>

<x:HtmlEditor runat="server" Label="文字编辑器" ID="HtmlEditor1" Height="250px">

</x:HtmlEditor>

<x:TextArea ID="TextArea1" Label="多行文字框" runat="server" Height="150px">

</x:TextArea>

<x:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="获取 HTML 编辑器的内容"

CssClass="inline">

</x:Button>

<x:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="设定 HTML 编辑器的内容">

</x:Button>

</Items>

</x:SimpleForm>

</form>

</body>

</>

‘陆’ 网站如何防止sql注入攻击的解决办法

首先我们来了解下什么是SQL注入,SQL注入简单来讲就是将一些非法参数插入到网站数据库中去,执行一些sql命令,比如查询数据库的账号密码,数据库的版本,数据库服务器的IP等等的一些操作,sql注入是目前网站漏洞中危害最大的一个漏洞,受攻击的网站占大多数都是sql注入攻击。

sql注入攻击用英语来讲Structured Query Language,在网站的编程语言当中是一种比较另类的网站开发语言,我们网站安全行业通常来讲sql是用来数据库查询的一种网站开发语言,同时也是一种脚本文件的一个文件名,通俗来讲sql就是用来对网站的数据库进行查询,以及增加,写入,更新数据库的一个sql数据库操作。

关于数据库我们分为2种数据库,一种是关系数据库,非关系数据库,那么目前网站使用的都是关系数据库,关系数据库分为sql数据库,microsoft sql server数据库,ACC数据库,mysql数据库,oracle数据库,DB2数据库,postgresql数据库等等的关系数据库,非关系数据库分为nosql数据库,可以存储很大数据,针对于一些并发较高,存储较多,云计算的场景,频繁读取写入的数据库,像memcachedb,redis,mongodb等等非关系数据库。

那么什么是sql注入呢? 简单来讲就是对网站强行进行插入数据,执行sql恶意语句对网站进行攻击,对网站进行sql注入尝试,可以获取一些私密的信息,像数据库的版本,管理员的账号密码等等。

关于如何防止sql注入攻击,我们从以下几点开始入手

首先我们可以了解到sql注入攻击都是通过拼接的方式,把一些恶意的参数拼接到一起,然后在网站的前端中插入,并执行到服务器后端到数据库中去,通常我们在写PHP网站代码的时候会将get ID这个参数值获取到后直接拼接到后端服务器中去,查询数据库,但是如果拼接了一些恶意的非法参数,那么久可以当做sql语句来执行,如果防止sql注入呢?

为了防止网站被sql注入攻击,我们应该从一开始写代码的时候就应该过滤一些sql注入的非法参数,将查询的一些sql语句,以及用户输入的参数值都以字符串的方式来处理,不论用户输入的什么东西,在sql查询的时候只是一段字符串,这样构造的任何恶意参数都会以字符串的方式去查询数据库,一直恶意的sql注入攻击就不会被执行,sql注入语句也就没有效果了,再一个就是网站里的任何一个可以写入的地方尽可能的严格过滤与限制,漏下一个可以输入的地方网站就会被攻击,网站就会被黑,所有做的网站安全就会没有效果,包括一些get,post,cookie方式的提交都是不可信的,像数据表里referer user-agent等字段都是可以伪造,写入sql注入语句的,像前端时间爆发的ecshop漏洞利用的就是user.php,伪造referer参数进行了sql注入,执行了远程代码。

再一个防止sql注入的方法就是开启PHP的魔术配置,开启安全配置模式,将safe_mode开启on.以及关闭全局变量模式,register_globals参数设置为on,magic_quotes_gpc参数开启,防止sql注入.如果对网站防止sql注入不懂的话,也可以找专业的网站安全公司来做安全,防止sql注入。

‘柒’ 前端图表如果处理大量数据该怎么办

浅谈一下Cognos处理大数据的思路,仅针对10.2.1以下的版本,对于10.2.1当中引入的hadloop等分布式数据仓库等不做介绍。我们主要从一个一般中等项目当中,用怎样的思路来优化我们的查询。
我们主要从3个思路来思考大数据的处理

一、数据库层次
现在主流的Cognos项目,主要的开发模式还是基于rolap的dmr报表建模。因此,数据库的优化就显得由为重要。主要通过以下几个方面优化我们的数据库:

(1)维度id,维度层次id等关键减缩字段建立索引建立、维护。
(2)根据数据量的大小,按时间等进行分区优化。
(3)高速缓冲表MQT的使用
(4)表空间、缓冲池设置等
(5)数据库性能优化

二、Cognos Server优化
Cognos优化包括对配置文件的优化,集群的搭建,服务和日志的开启等基于cognos 软件安装,配置的优化,主要包括以下几个方面:

2.1 apache 配置优化
Timeout(超时)/MaxKeepAliveRequests(最大的请求数)/KeepAliveTimeout(请求超时)的优化配置

2.2Cognos自带tomcat配置调优
(1)可修改TOMCAT配置文件CRN_ROOT\tomcat.\conf\server.xml。其参数集中在行:
可以对maxProcessors(最大进程数)/AcceptCount(最大连接数) ConnectionTimeout(连接超时)进行修改
(2)文件路径:CRN_ROOT\tomcat.\conf\web.xml
可以对session-timeout进行修改.

2.3Cognos sever配置文件优化
2.3.1 reportservice.xml优化
文件路径:CRN_ROOT\ webapps\p2pd\WEB-INF\services\ reportservice.xml
注:修改文件后,重启服务后配置生效。
包括以下参数 max_process(交互报表处理进程数,和cpu有关) inger_process(交互报表初始化进程数,和cpu优关)
max_non_affine_connections_per_process(交互报表所占线程数) idle_process_check_interval_ms(空闲检测时间)
queue_time_limit_ms(报表服务队列时间限制) async_wait_timeout_ms(Dispatcher请求等待同步时间)

2.3.2 batchreportservice.xml
文件路径:CRN_ROOT\ webapps\p2pd\WEB-INF\services\ batchreportservice.xml
注:修改文件后,重启服务后配置生效。
包括以下参数 max_process(服务批量报表处理所占进程数) linger_process(服务批量报表处理初始化进程数)
max_non_affine_connections_per_process(服务批量报表处理所占线程数) idle_process_check_interval_ms(空闲进程检测时间间隔)
idle_process_max_idle_ticks(空闲进程检测标记) queue_time_limit_ms(批量报表处理排队时间限制) async_wait_timeout_ms(Dispatcher请求等待同步时间)

2.3.3 CQEConfig.xml
主要是与数据库参数设置,文件路径:CRN_ROOT\configuration\ CQEConfig.xml.sample
注:将CQEConfig.xml.sample文件名修改为CQEConfig.xml后,重启服务后配置生效。
可以修改以下参数:Timeout(应用数据库连接超时设置) PoolSize(应用数据库连接池最大连接数设置) queryReuse(查询缓冲设置)
2013-07-08 0
分享
答案对人有帮助,有参考价值1

曾力 - Cognos讲师、Cognos独立顾问、数据仓库架构师 2013-07-08 回答
2.3.4 ppds_cfg.xml
主要进行缓存和日志参数设置,文件路径:\cognos\c8\configuration\ ppds_cfg.xml
注:重启服务后配置生效。
可以修改以下参数:ReadCacheSize(可减少用户访问时服务器的磁盘IO。提高访问速度。) pcQueryLogFile(建议生产环境关闭该日志的跟踪,一般默认也是关闭状态)

2.4 Cognos content store优化
2.4.1优化内容库连接服务
内容库最好外配为db2 oracle等数据库,不要用自带的derby.因为项目中的日志信息会非常多,严重影响内容库的效率。
Cognos Administration,在系统下选择选择对应的服务,选择ContentManagerService的属性,设置相应的连接参数信息。

2.4.2日志优化
适当开启各个cognos服务的日志级别,越高级的级别对应更详细,更明确的日志,但也会影响整个系统的效率。
这是一把双刃剑,需要适当调整。日志级别设置得越高,就越降低系统性能。通常情况下,您可以将级别设置为
“最小”或“基本”来收集错误,或设置为“请求”来收集错误和警告。

2.5提高访问数据库速度
Cognos和数据库间参数在cer\bin\cogdm.ini文件中,(根据版本不同是安装目录的数字,根据连接的数据库不同,是对应数据库名称的关键字)
以oracle数据库为例,参数在cogdmor.ini文件中,打开这个文件查找字符串Fetch Number of Rows=去掉这行前面的分号,将10改成2000;
这样这行就成了Fetch Number of Rows=2000,表示是每次从数据库取2000条数据。其他数据库基本上都有类似的配置。用以提高从数据库中提取数据的速度。

2.6加大缓存
cer\bin\Cer.ini(*根据版本不同是安装目录的数字):
SortMemory=5120
(这里 SortMemory 单位是 2kbytes,5120代表 2k x 5120 = 10M)(技巧:一般 SortMemory 取空闲内存的十分之一到八分之一大小)

2.7修改cognos configuration中的参数来优化
在cognos configuration中有很多参数可以优化来提高整体软件的运行效率,比如增加内存、增加查询缓存

2.8分布式部署
分布式部署可以大大提升Cognos服务器的负载能力,同时容错保护功能可以使服务器更为稳定的运行,很好的支持大用户量的并发使用。
2013-07-08 0
答案对人有帮助,有参考价值1

曾力 - Cognos讲师、Cognos独立顾问、数据仓库架构师 2013-07-08 回答
3.报表设计优化
Cognos报表作为一个工具,在非cube模式下,最终我们执行报表查询的时候,我们的报表发送到数据库进行查询的本质还是sql,所以,在我们制作一张报表的时候,我们要尽可能的利用fm,rs当中的功能,优化报表最终执行生成的SQL实现整个报表的优化。而CUBE模式下,我们更多要考虑配置、存放和数据库大小所造成的影响,下面我会细细说来。
2013-07-08 0
答案对人有帮助,有参考价值1

曾力 - Cognos讲师、Cognos独立顾问、数据仓库架构师 2013-07-08 回答
3.1 FM建模优化
3.1.1手写SQL定制查询主题
右键点击查询主题的菜单项Edit Definition…可以进入SQL语句编写框,调整查询主题的SQL语句。默认情况下,这里的SQL语句为Cognos SQL类型。如果需要编写应用数据库可以直接运行的本地SQL需要将这里的SQL类型进行设置。点击右上方的Options按钮,选择SQL Settings标签页,选择SQL Type为Native。这个时候,我们手写SQL就非常注重这个SQL的优化,尽量避免SELECT *,用EXISTS替代IN,多使用DECODE来进行判断,条件语句注意点等常用SQL优化策略,编写对应的SQL.

3.1.2尽量使用特定数据的数据库函数
在菜单项Actions中选择Specify Package Function List…指定报表定制中可以使用的数据库函数列表。将除应用数据库意外的其他数据库类型从Selected function sets中选到Available function sets中,尽量使用特定数据库的自带函数可以提高查询效率。

3.1.3表关联设定
在建立表关联尽量避免使用外关联关系(包括左外关联、右外关联、全外关联)。外关联的使用会使数据库的查询压力骤增,从而影响前端报表的生成。在星型结构、雪花型结构的数据仓库模型中,尽量按照一对一、一对多的关联关系设定维表与实事表之间的关联,Cognos Server会依照这里的关联关系自动优化提交给数据库的SQL语句。如果关联关系中出现了环状连接关系,可以通过别名表或是快捷键的方式解决环状连接问题.

3.1.4Edit Governors查询性能设置
在菜单项Project中选择Edit Governors,可以设置查询的查询性能
Report table limits 该属性设置报表中运行SQL所涉及的TABLE数量
Data retrieval limits 该属性设置报表中运行SQL返回结果的数量
Query execution time limits 该属性设置报表中运行SQL的执行时间
Large text items limit 该属性设置报表中运行SQL返回大文字块的字符数量限制
2013-07-08 0
答案对人有帮助,有参考价值1

曾力 - Cognos讲师、Cognos独立顾问、数据仓库架构师 2013-07-08 回答
3.2 RS报表调优
3.2.1报表函数的使用
在报表函数的使用上,尽可能使用应用数据库能够解析的本地数据库函数,函数列表中的通用函数,在处理时会将函数放在报表服务器进行运算,从而增大了报表服务器的性能开销。

3.2.2 观察查询的SQL
我们选择查询页面,GENERATE SQL/MDX观察这个报表生成的SQL并进行不断优化,

3.3.33.2 RS报表调优
3.2.1报表函数的使用
在报表函数的使用上,尽可能使用应用数据库能够解析的本地数据库函数,函数列表中的通用函数,在处理时会将函数放在报表服务器进行运算,从而增大了报表服务器的性能开销。

3.2.2 观察查询的SQL
我们选择查询页面,GENERATE SQL/MDX观察这个报表生成的SQL并进行不断优化,

3.3.3查询字段、查询表顺序调整
根据数据库的优化策略,可能需要将查询字段的顺序进行调整,可以在Data Items窗口中进行设置。查询SQL语句中,From关键字后面的表顺序是按照select关键字后出现的字段顺序进行设置的。在为表顺序进行设置时,属性为Identifier或Attribute的字段比属性为Fact的字段在为表排序时的优先级要高,即,先以Identifier、Attribute字段的出现顺序为表进行排序,如果没有上述两类字段,才以Fact字段的出现顺序为表进行排序。

3.3.4聚合前后设置过滤条件
将过滤条件的Application属性设置为After aggregation或Before aggregation可以调整过滤条件在聚合前或是聚合后生效。After aggregation生成过滤条件的SQL语句使用的是关键字having,而Before aggregation生成过滤条件的SQL语句使用的是关键字where。

3.3.5取消报表自动分组提高明细报表查询速度
如果报表要展现明细数据,不想使用任何汇总,我们可以到此报表对应的查询中将自动分组属性定义为否。修改地方:对象的属性Auto Group & Summarize可以设置当前SQL语句的查询中是否加入distinct、sum、group by这样的关键字。默认情况下,该属性设置为Yes,可以根据查询情况关掉此开关项,减少SQL语句的复杂度。

3.3.6自动排序设置
在Query的Auto-sort属性中可以为查询设置是否自动排序。如果选择是,则会在生成的SQL语句中自动加入Order By关键字,排序字段将自动根据数据项的属性进行设置(如果查询字段的usage属性为Attribute、Identifier则排序,如果为Fact则不排序);如果选择否、则不排序;如果选择最小,则根据数据项的排序属性进行排序设置。默认值为最小。

3.3.7报表Processing设置
在Query的Processing属性中可以为查询设置SQL的处理设置。Cognos Report Studio会将报表的所有设置首先转换为Cognos SQL提交给报表服务器,服务器在进行必要处理后,会将SQL语句转换为应用数据库本地执行的SQL语句,进行数据库处理。为提高报表的处理速度,要尽可能的将报表的处理运算放在数据库进行,以保证其运行速度。将该属性设置为Database only会将报表页面生成的Cognos SQL不经报表服务器处理全部转换为数据库能够执行的本地数据库SQL,如果将该属性设置为Limited Local,则将报表页面生成的Cognos SQL先进行必要的报表服务器运算,然后再将剩余的部分提交给数据库进行本地SQL的处理。默认值为Framework中为Datasource对象的设置的queryProcessing属性。

3.3.8使用With子句
在Query的Use SQL With Clause属性中可以为查询设置是否使用With子句。部分数据库例如Oracle支持With关键字,当查询中嵌套子查询时,可以通过With子句的使用,减轻报表服务器对Cognos SQL的处理,从而提升报表的运行性能。如果将该属性设置为Yes,则允许使用With关键字,查询中生成的Native SQL将出现With子句;如果将该属性设置为No,虽然拒绝使用With关键字。默认值为Framework中Edit Governors下的Use WITH clause when generating SQL属性设置。

3.3.9报表服务器本地缓存设置
在Query的Use Local Cache属性中可以为查询设置是否使用本地缓存。如果将该属性设置为Yes,则启用服务器的本地缓存,服务器将为查询结果保存在session中,当用户在浏览器内再次打开同一张报表时,查询结果将取自缓存,从而减轻了数据库的负载压力;如果将该属性设置为No,则禁用服务器的本地缓存,查询结果全部取自数据库的实时数据。默认值为Framework中Edit Governors下的Allow usage of local cache属性设置。
我用的是finereport,比这个方便