Sharepoint 如何在启用限制的情况下从大型列表中获取?

Sharepoint 如何在启用限制的情况下从大型列表中获取?,sharepoint,sharepoint-2010,throttling,Sharepoint,Sharepoint 2010,Throttling,我们有一个包含50000项的SharePoint列表,希望在不禁用SP2010默认限制的情况下从中获取一些数据 在关于处理大型列表的文章中,我们认为关键因素是在SPQuery上使用一个较小的行限制,并使用ListItemCollectionPosition进行批处理 但是,对于我们这样的代码(某些内容),仍然会触发限制异常: SPQuery query = new SPQuery(); query.Query = "<Where><Contains><FieldRe

我们有一个包含50000项的SharePoint列表,希望在不禁用SP2010默认限制的情况下从中获取一些数据

在关于处理大型列表的文章中,我们认为关键因素是在SPQuery上使用一个较小的行限制,并使用ListItemCollectionPosition进行批处理

但是,对于我们这样的代码(某些内容),仍然会触发限制异常:

SPQuery query = new SPQuery();
query.Query = "<Where><Contains><FieldRef Name=\"MatterName\" /><Value Type=\"Text\">7476922</Value></Contains></Where>";
query.ViewFields = "<FieldRef Name=\"MatterName\"/>";
query.RowLimit = 10;

int index = 0;
do
{
    SPListItemCollection batch = mattersList.GetItems( query );

    query.ListItemCollectionPosition = batch.ListItemCollectionPosition;
} 
while ( query.ListItemCollectionPosition != null );
SPQuery query=new SPQuery();
query.query=“7476922”;
query.ViewFields=“”;
query.RowLimit=10;
int指数=0;
做
{
SPListItemCollection batch=mattersList.GetItems(查询);
query.ListItemCollectionPosition=batch.ListItemCollectionPosition;
} 
while(query.ListItemCollectionPosition!=null);
根据SharePoint Connections 2010的MVP专家的说法,这是出于设计,因为结果集上的隐式排序仍然会触发5000项限制阈值


这很好,但是我们如何从这个列表中获取信息呢?使用a是更好的选择吗?如果是这样的话,内容迭代器会让这一切发生的魔力是什么?

< P>作为管理员,而不是开发人员,我没有代码解决方案,但确实有2个没有代码的“解决方案”供您考虑。
  • SP允许为列表/网站集所有者设置一组不同的限制规则—我认为默认设置为10000—但这可以增加。其想法是,限制的是普通最终用户,而不是列表所有者。这可能会有帮助
  • SP还允许管理员定义一天中无需任何限制即可执行查询的时间。因此,如果有可能在午夜运行您的查询等-这可能是一个选项

  • 这两个设置都是在Web应用程序级别进行调整的,
    子句中使用的字段需要编制索引

    设置索引字段也需要在节流之外进行。例如,您有一个全新的列表,设置要索引的列将通过。但是,一旦该列表的项目计数超过限制阈值,设置新索引将失败,因为限制也适用于添加索引。

    您可以使用它来帮助访问大型列表中的5000多个项目,而不会达到列表限制限值和接收SPQueryThrottleException


    ContentIterator实现了一种回调模式,用于对查询进行分段,以便一次处理单个项。如果需要处理可能超过节流限制的大量项目

    < P>,请考虑使用此能力。如果争用者解决方案有索引(如果需要的话),如果索引有超过5000行(基于中央管理),则有例外。即使在contentIterator实例开始浏览内容之前,您仍然会遇到节流异常。

    您可以使用:

    query.QueryThrottleMode=SPQueryThrottleOption.Override

    以超级用户身份执行查询