我正在寻找如何优化批量下载CRM2011数据的方法。以下是两个主要场景:
a)完全同步:下载所有数据-首先下载所有帐户,然后下载所有联系人等。
b)增量同步:下载自给定日期以来修改的所有实体
我们使用3个线程的多线程下载器。每个线程对逐页下载的一种实体类型执行FetchXml。解析的对象存储在下载器缓存中,下载器继续下一页。还有另一个线程从缓存中提取下载的数据并对其进行处理。这种组织将下载速度提高了2倍以上。
我看到的问题是:
a) FetchXml协议效率很低。例如,它包含大量不需要的数据。示例: FormattedValues占用10-15%的带宽(我的数据显示,在源XML流中约占15%,在压缩后的流中约占10%),尽管我们所做的只是a) Xml解析,b)丢弃。(请注意,解析也是不可忽视的- iOs/Android Mono解析器的速度令人惊讶。)
b)在增量同步的情况下,大多数FetchXml请求返回零项。在这种情况下,将多个FetchXml请求合并为一个请求将是非常理想的。(AFAIK这是不可能的。)或者使用另一种技巧,比如询问修改过的对象的数量,我还没有调查什么是可能的。
有谁有什么建议可以优化FetchXml流量吗?
发布于 2014-03-12 05:00:22
你最快的方法是直接使用SQL server来做这样的事情(除非你使用的是在线的)。
要使增量更快,最好的办法是使用FetchXML提供的聚合功能,它既非常快,又不那么冗长。
为什么要在iOS/Android Mono上解析?如果您要将此数据共享给大量设备,最好有一个中央缓存服务器,它可以将此数据以json (压缩)格式发送回设备(也可能是bson)。然后,缓存服务器将请求更新更改,处理这些更改,然后将任何格式的增量更改发送回客户端。在客户机上速度会快得多,带宽也会少得多。
发布于 2014-03-12 09:24:33
我不确定有什么方法可以进一步优化FetchXML。我会问您为什么不使用OData端点和REST,特别是当您主要关心通过网络发送的数据时。
我和一些优秀的CRM MVP谈过,我知道他们已经使用REST将数据迁移到CRM。我不确定他们这样做是否是因为它更快,但我认为这就是原因。
我知道您将最小化发送到客户机的数据量,因为XML非常臃肿。
发布于 2014-03-19 23:40:26
看一下ExecuteMultipleRequest,它允许您一次执行多个请求/查询...http://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.messages.executemultiplerequest.aspx
https://stackoverflow.com/questions/22331406
复制相似问题