就平台速度和访问 Dynamics CRM 4 上的数据(只读)的可维护性而言,最佳方式是什么?我已经完成了所有三个,但对人群的意见很感兴趣。
- 通过 API
- 直接通过网络服务
- 通过数据库调用视图
……为什么?
我的想法通常集中在 DB 对视图的调用上,但我知道那里有纯粹主义者。
就平台速度和访问 Dynamics CRM 4 上的数据(只读)的可维护性而言,最佳方式是什么?我已经完成了所有三个,但对人群的意见很感兴趣。
……为什么?
我的想法通常集中在 DB 对视图的调用上,但我知道那里有纯粹主义者。
鉴于这两个要求,我会说您要调用视图。精心设计的 SQL 查询将飞速发展。
如果您打算修改数据,则需要通过 API,但这不是最快的方法,因为它不允许深度加载实体。例如,如果您想查看客户及其订单,则必须单独加载两者,然后手动加入。SQL 查询已经将数据连接到哪里。
没关系,TDS 流比 API 和 Web 服务使用的 SOAP 消息更有效。
更新
我应该指出一般的视图和 CRM 数据库:CRM 不会优化自定义实体的表或视图上的索引(怎么可能?)。因此,如果您有一个始终按目的地查找的卡车装载实体,则需要为该属性添加索引。根据您的应用程序,它可能会对性能产生巨大影响。
我将通过直接查询表而不是视图(*base 和 *extensionbase)来添加 jake 的评论,这样会更快。
按照速度顺序是:
直接表更新:
我不同意 Jake 的观点,即所有更新都必须通过 API。正确的说法是通过 API 是唯一受支持的更新方式。事实上,在某些情况下,直接修改表是最合理的选择:
在系统不运行时一次性导入大量数据。
跨大量数据修改特定字段。
我同意这种直接修改应该只在 API 的性能不可接受的情况下作为最后的手段。但是,如果您想修改数千条记录的布尔字段,直接对表执行 SQL 更新是一个不错的选择。
相对速度
就相对速度而言,我同意 XVargas。
未过滤视图与表:我还没有发现值得手动加入基本表和扩展表的麻烦的性能优势。
未过滤视图与过滤视图:我最近正在处理一个复杂的查询,使用过滤视图运行大约需要 15 分钟。切换到未过滤视图后,此查询运行了大约 10 秒。查看各自的查询计划,原始查询有 8 个操作,而针对过滤视图的查询有 80 多个操作。
未过滤视图与 API:我从未将通过 API 查询与查询视图进行比较,但我比较了通过 API 写入数据与直接通过 SQL 插入数据的成本。通过 API 导入数百万条记录可能需要几天时间,而使用插入语句的相同操作可能需要几分钟时间。我认为在读取过程中差异不是很大,但可能仍然很大。