学习目标
完成本单元后,您将能够:
- 为大数据量设计一个数据模型。
- 描述三种类型的数据倾斜以及如何避免它们。
- 数据模型以包含外部对象。
规划你的数据模型
数据是任何应用程序的关键元素之一。用户不断创建数据。日积月累。突然间,您的组织已经累积了数百万条记录,数千个用户和数千兆字节的数据存储。
这些大数据量(LDV)可能导致性能下降,包括查询速度较慢,搜索和列表视图较慢以及沙箱刷新速度较慢。如果您计划先行调整LDV,则可以避免这种困境,从一开始就设计您的数据模型以构建可扩展性。
数据倾斜的独家新闻
管理大数据量以获得最佳性能的关键在于仔细设计记录所有权以避免数据倾斜。如果超过10,000个子记录与组织内的同一父记录相关联,则会发生数据倾斜。
使用足够的客户规划数据模型,以将每个父级的子级记录数保持在此阈值以下,并在创建这些客户时分配新的子级记录。如果您不使用这些策略,则会出现三种类型的数据倾斜,并会对性能产生负面影响:客户数据倾斜,所有人倾斜和查找倾斜。
客户数据偏差
某些Salesforce对象(如客户和机会)具有特殊的数据关系,可以在私有共享模型下维护父子记录访问。在这些关系之一中与同一父对象关联的子记录太多会导致客户数据倾斜。假设您有一堆未分配的联系人,并将其放在名为“未分配”的一个客户下。这可能会造成记录锁定和共享性能方面的问题。
记录锁定
以下是另一种情况:您正在多个线程中更新同一客户下的大量联系人。对于每次更新,系统都锁定要更改的联系人及其父客户,以保持数据库中的完整性。即使每个锁都保持很短的时间,因为所有的更新都试图锁定同一个客户,所以更新失败的风险很高,因为前一个锁仍然持有该客户的锁。
共享问题
谈到共享,也有类似的动态。根据您配置的共享方式,当您做一些看起来很简单的事情时,比如更改客户的所有者,您可能需要检查每个客户的子记录并调整其共享。这可能包括重新计算角色层次和共享规则。如果我们谈论成千上万的子记录,可能会吃掉很多时间。
所有权倾斜
当具有相同对象类型的大量记录属于单个用户时,这种不平衡会导致所有权倾斜。由于每个记录都需要拥有一个所有者,所以似乎自然的解决办法是将这些记录倾斜到一个通用所有者上,例如前面提到的“未分配”。但是这可能会导致性能问题,因为共享计算需要管理这些记录的可见性。
当角色层次结构中存在倾斜所有者时,像删除或所有者更新这样的操作必须从角色层次结构中的旧所有者和所有父用户以及共享规则访问的所有用户中移除共享。这就是为什么所有权变更往往是系统中成本最高的交易变更之一。
在某些情况下,所有权倾斜根本无法避免。在这些情况下,最好确保倾斜的所有者没有角色。这样,您就可以将用户及其记录从角色层次结构及其关联的共享规则中分离出来。
查找倾斜
当大量记录与查找对象(您正在搜索的对象)中的单个记录相关联时,会发生查找倾斜。因为您可以将查找字段放在Salesforce中的任何对象上,所以查找偏斜可能会为组织中的任何对象创建问题。
如果最终发现查询偏斜并且具有非常复杂的自定义实现,那么您可能会在没有意识到的情况下创建问题。通过仔细考虑管理查找倾斜的选项,您可以避免锁定查找字段的问题,以确保您的架构可以扩展以满足您的组织成长。
是什么让查找偏斜如此糟糕? Salesforce中的查找字段实质上是对象之间的外键关系。每次插入或更新记录时,Salesforce都必须锁定为每个查找字段选择的目标记录。这确保了当数据被提交到数据库时,其完整性得以保持。
在正常情况下,保存操作执行得如此之快以至于您不会遇到锁定。但是,当您在自动化进程中同时添加自定义代码和LDV时,您可能会遇到锁定异常,当您尝试插入或更新记录时会导致失败。
由于没有任何专门用于识别查找偏斜的工具,查找这些架构问题可能就像在大海捞针一样。请注意,在某些使用模式下,查找偏移可能根本不会导致任何问题,因此最好根据会导致问题的模式进行搜索。您应该评估具有大量记录的对象以及大量的并发插入和更新活动。
使用外部对象
LDV的另一个策略是使用外部对象 – 这意味着不需要将数据带入Salesforce。通过数据分层策略,将数据分散到多个对象中,并根据需要从另一个对象或外部存储中提取数据,避免在组织中存储大量数据,并避免与LDV相关的性能问题。
外部对象与自定义对象类似,只不过它们映射到存储在Salesforce组织外部的数据,使用户和Force.com平台可以搜索外部数据并与之交互。
通过按需访问记录数据,外部对象总是反映外部数据的当前状态。您不必在Salesforce中管理该数据的副本,因此您不会浪费存储和资源来保持数据同步。如果您有大量数据无法或不想存储在Salesforce组织中,则最好使用外部对象,并且您只需要在任何时候使用少量的数据。
外部数据源指定如何访问外部系统。 Salesforce Connect使用外部数据源来访问存储在Salesforce组织外部的数据。 Files Connect使用外部数据源访问第三方内容系统。外部数据源具有关联的外部对象,您的用户和Force.com平台用于与外部数据和内容进行交互。
外部对象查找
外部对象支持标准的查找关系,它使用18个字符的Salesforce记录标识将相关记录相互关联。但是,存储在Salesforce组织外部的数据通常不包含这些记录标识。因此,外部对象有两种特殊类型的查找关系:外部查找和间接查找。
这些外部查找和间接查找将父对象上的特定字段的值与子对象上的关系字段的值进行比较。当值匹配时,记录是相互关联的。
父级是外部对象时使用外部查找关系。外部查找关系将子标准,自定义或外部对象链接到父级外部对象。父外部对象上的标准外部标识字段的值与外部查找关系字段的值相匹配。对于子外部对象,外部查找关系字段的值来自指定的外部列名称。
外部数据不包括Salesforce记录标识时,请使用间接查找关系。间接查找关系将子外部对象链接到父标准或自定义对象。在外部对象上创建间接查找关系字段时,指定父对象字段和子对象字段以相互匹配,在父对象上选择一个自定义的唯一外部ID字段以匹配子对象的间接查找关系字段,其值由指定的外部列名决定。
以下是可用于外部对象的关系类型的细分:
关系 | 允许的子对象 | 允许的父对象 | 父字段匹配记录 |
Lookup | 标准 自定义 外部 |
标准 自定义 |
18个字符的Salesforce记录标识 |
外部查询 | 标准 自定义 外部 |
外部 | 外部ID标准字段 |
间接查询 | 外部 | 标准 自定义 |
您选择具有外部ID和唯一属性的自定义字段 |
现在,当您为大数据量构建组织架构时,您应该牢记(避免)关键事项。 您可能还需要聘请Salesforce Strategic Services的架构师来帮助您设计管理初始配置和增长的最佳方法。 在下一个单元中,我们将LDV查询和搜索放入混合中。