当前位置: 首页>>技术解读>>正文


列表视图阈值有哪些好方法?

webfans 技术解读 , , , 去评论

问题描述

我正在尝试使用SSRS(报表服务)中的SharePoint列表中的数据。报告不是太大 – 只有几十行,但对于每一行,我需要从第二个列表添加数据,其中(当前)包含7000行。在SharePoint 2007上,我已成功完成类似的操作,但我无法在SharePoint 2010上使用它。我尝试过:

我一直在打同一面墙 – 我无法获得任何数据,因为列表太大了!我得到一个类似的错误:

The attempted operation is prohibited because it exceeds the list view threshold enforced by the administrator.

这令人沮丧。我已经阅读了很多关于这个主题的内容,除了提高整个应用程序的门槛之外,还无法看到它的好方法。

有这个新限制的简单方法吗?有困难吗?我正在寻找”best practice” ……看起来我不能可靠地继续使用这些方法。唯一的”good”解决方案我可以想到它使用SSIS将所有行复制到数据库,但这似乎有点过分……

最佳解决方法

在管理中心中,您可以完全禁用列表阈值,或设置更高的限制。您还可以在禁用限制时设置时间窗口,然后运行报表服务。转到管理中心的Web应用程序管理页面,然后从功能区的“常规设置”按钮中选择“资源限制”选项。

如果CAML使用过滤器查询列表,使得它返回的项目数量少于应该起作用的阈值。

次佳解决方法

要避免列表视图阈值,您需要索引库中的列并查询该列。只要查询中返回的行数低于listview阈值,就不会得到异常。

例如,我在尝试检索SharePoint库中的所有文件夹时遇到此问题。文件夹的数量远低于5000(默认的listview阈值),但是库中有超过20,000个项目,我触发了异常。

解决方案是索引内容类型(可通过SharePoint库设置访问)并使用以下查询:

<Where><BeginsWith><FieldRef Name='ContentTypeId' /><Value Type='ContentTypeId'>0x0120</Value></BeginsWith></Where>

您只需要弄清楚如何确保您的查询返回低于listview阈值。

第三种解决方法

您可以使用ContentIterator类绕过列表视图阈值,但您需要使用自定义代码来获取数据。

文档:“提供迭代列表项,列表,站点以调节传输的数据量的方法(即,避免抛出SPQueryThrottledException)。”

第四种方法

您还可以禁用具有太多项目的特定列表的EnableThrottling属性,如Michael Morrison wrote here

$web = Get-SPWeb http://url/to/web/with/list
$list = $web.Lists[“BIG_LIST_NAME”]
$list.EnableThrottling = $false

祝你好运!

第五种方法

SSRS 2008 R2具有已添加的SharePoint数据源选项。 SharePoint数据源将执行一系列2000个最大项目查询,直到整个查询完成。这使您可以克服列表视图阈值,而不会对性能产生重大影响。 PowerPivot可以更好地执行此操作。它将一次查询列表1000行,并将结果缓存在excel绑定工作簿中。 PowerPivot还允许创建查找列和关系。然后,SSRS可以在SharePoint内部查询PowerPivot数据源,就像它是分析多维数据集一样。

第六种方法

虽然这个提问者的选择是提高限制,但它有充分的理由:避免创建表现不佳的网站。随着您的网站内容增长,或者它成为其他网站的模板,您会发现每个用户点击需要“放宽”此限制的网页都会导致您的网站速度变慢。用户越多,效果就越快会发生。

我在http://squarepoint.blogspot.com/2013/05/creating-performant-sharepoint-apps.html上写了一篇关于这个和一套解决方案的博客。可能会有一些建议可以帮助您避免问题并保持SharePoint运行而不会降低性能。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2026.html,转载请务必附带本地址声明。