通过元数据提高速度Sharepoint请求

时间:2016-04-18 10:35:14

标签: c# sharepoint sharepoint-2013 caml

为了避免XY问题/混乱我首先谈论我的问题,然后我想如何解决它:

目前我正在构建一个检索Sharepoint文件的应用程序。该应用程序的第一个版本是检索URL(我知道带有给定输入的url)并下载流,这非常快! 不幸的是,要拥有多个版本的sharepoint文件,我们必须将文件名重命名为时间戳,程序必须搜索元数据。当我找到文件时,我知道URL,因此我知道要下载的流。

到目前为止,我有一个有效的例子,我得到一个流回来。但问题是需要44秒才能完成。 问题在于:

clientContext.ExecuteQuery();

使用以下CAML查询:

<Query>
    <Where>
        <And>
            <And>
                <Eq>
                    <FieldRef Name='Shipment' />
                    <Value Type='Number'>766956</Value>
                </Eq>
                <Eq>
                    <FieldRef Name='Loadunit' />
                    <Value Type='Number'>389254</Value>
                </Eq>
            </And>
            <Eq>
                <FieldRef Name='Doc_type' />
                <Value Type='Text'>POD</Value>
            </Eq>
        </And>
    </Where>
</Query>

我使用制表符等格式化了此查询块,以提高可读性。正如我所提到的:查询有效,没有错误。

Sharepoint(2013)图书馆拥有5万件物品(每天都在增加)。 列表“Shipment”和“LoadUnit”被编入索引。我在周末对整个事情进行了重新索引,但没有运气。

我也遵循了一些提示,但其中许多提示已经完成或不需要:

我的最终解决方案是回到我的第一个想法,即在没有元数据部分且没有时间戳作为名称/ URL的情况下搜索URL。但是将它与元数据结合起来会更好/更有条理。

PS:对于好奇的人:我在运输行业工作。我们必须为客户保存合法文件,因此我正在构建一个应用程序,它会自动将其提供给任何人请求。

1 个答案:

答案 0 :(得分:0)

根据经验,您应该最小化从任何数据库/系统检索的数据量,尤其是当目标和源之间的延迟很高时。在CAML查询中,您可以通过在SPQuery对象的ViewFields属性中显式定义所需字段列表来实现。

对于SharePoint中的高性能列表/库,您可以遵循long list of best practices。但是,由于您处理的数据具有法律性质,我认为它具有高度安全性,可能是您遇到性能问题的根本原因。如果SharePoint列表中存在大量唯一受保护的项目,则该列表上的任何操作都将受到巨大的性能影响。如果您的目标列表就是这种情况,请重新设计它。首先将相关项目尽可能地合并到文件夹中,并保护文件夹而不是单个文档。然后确保阅读上面链接的文章的行包装和查找字段部分。事实上,如果你要参与一段时间的SharePoint,请记住那篇文章中的每一条原则并靠它生活......你会开始享受更多的工作,你的情绪会有所改善,总的来说你会变得更快乐那个人,我保证......