本篇参考:

https://developer.salesforce.com/docs/atlas.en-us.224.0.bigobjects.meta/bigobjects/async_query_overview.htm

https://trailhead.salesforce.com/content/learn/modules/big_objects

https://developer.salesforce.com/docs/atlas.en-us.salesforce_large_data_volumes_bp.meta/salesforce_large_data_volumes_bp/ldv_deployments_infrastructure_indexes.htm

我们在salesforce学习工作中,接触到很多的 标准的 object ,自定义 object 以及外部object。我们使用SOQL / SOSL 进行搜索,熟知他们的各种limitation,查询50000,DML 10000等等。
当数据量很多时,salesforce推荐我们where查询时要适当使用索引字段增快查询效率。我们做自定义开发开始效率都很好,随着数据越来越多,performance问题可能慢慢的出来。所以设计表的时候,表潜在的数据量可能会达到多少也是一个很重要的思考。
salesforce有一个 Big Object的概念,针对特别庞大的数据,可以使用 Big Object进行存储。所以问题来了?多少数据量算是庞大?

十万? 百万? 千万? 再往上好像很难在想象。不过在实际的一些特殊的业务场景这些数据量可能是远远不够的。举个例子,金融 / 保险等对钱敏感企业,可能会关心每一步的履历操作,针对每一步都需要记录,后期便于审计和追踪。这种数据通常会达到数以亿计。在salesforce中,Big Object 为十亿或更多记录提供一样的性能,并且可以通过一组标准api访问org或外部系统。也就是说如果潜在数据量可能达到10亿及以上,推荐使用 Big Object。

一. 应用场景与Big Object创建

在Salesforce中通常会有以下几种场景可能用到Big Object:

Customer 360:您有很多想要存储的客户信息。从忠诚度计划到交易、订单和账单信息,使用一个Big Object来跟踪每一个细节。
审计和追踪:salesforce提供了 field tracking的功能,每个表最多可以20个字段进行tracking,保留最多18个月,如果标准的满足不了审计和追踪的需要,可以考虑使用 big object实现。
历史归档:需要保持对历史数据的访问,以便进行大数据分析等目的情况下,可以考虑使用Big Object。

一. Big Object创建

1. Setup 搜索 big objects 以后选择Big Objects既可以查看当前的所有的 Big Objects,我们点击 new就可以新建一个 Big Object.
下图中是我们创建的一个 big object。可以看到目前的状态是 In Development,只有存在自定义索引字段才可以变成 development。

接下来我们按照要求创建一些自定义的字段,因为需要索引字段,索引字段前提是自定义字段要求勾选 required,所以真实的项目需要设计好哪些字段必填,哪些字段需要成为索引字段,一旦设计完索引字段便无法进行修改,想要修改只能重新创建 big object. 当我们创建完自定义字段以后创建自定义索引,索引最多只允许5个自定义的字段,最少也需要1个。

创建完字段接下来我们就需要编辑当前的 big object,将 object的 deployment status修改成 Deployed,则 一个Big Object创建完成。 

这里创建和普通的 object创建还是有一些区别的:

1. 后缀不同,普通的是 __c, big object是 __b.
2. 可选择的字段类型不同。 big object所能选择的类型更少,只可以选择 Lookup, Date/time, Email, Number, Phone, Text, TextArea(Long),URL.

二. 数据创建删除和查询

在聊如何创建和查询数据以前,先聊一下上面提到的序列 index。 我们以前学习SQL server等关系型数据库时,也接触过序列的概念。一言以蔽之:索引是对数据库表中一个或多个列的值进行排序的结构。索引是经过某种算法优化的,所以在针对某个索引字段查询时,查询次数会少很多,查询性能自然得到提升,我们可以将数据库索引好比是一本书前面的目录,能加快数据库的查询速度。salesforce object很多标准字段带了索引,可以查看上面的链接进行详细查看。

数据库索引有三种类型: 唯一索引 / 主键索引 / 聚集索引。 salesforce big object 应该是基于唯一索引来实现的。唯一索引是不允许其中任何两行具有相同索引值的索引。根据上面的表结构,索引使用 Rider_Account__c 以及 Start_Time__c 两个值共同作用,所以当有两条记录的这两个值均相同情况下,数据库只会创建一条数据。

big object可以通过 bulk api以及apex来创建, bulk api也是一个很大的章节,这里不做讲解,后期争取单独讲一下,这里的创建使用apex方式来进行。

apex通过 insertImmediate方法去插入数据,如果索引对应的字段值都是相同的,则只会生成一条数据,后面的会覆盖前面的值。

Datetime now = System.now();
List<Rider_History__b> riderHistoryList = new List<Rider_History__b>();
Rider_History__b riderHistory1 = new Rider_History__b();
riderHistory1.Start_Time__c = now;
riderHistory1.Rider_Account__c = 'test';
riderHistory1.Rider_Rating__c = 12.1;
riderHistory1.Service_Type__c = 'test';
riderHistory1.Start_Location_Latitude__c = 12.123;
riderHistory1.Start_Location_Longitude__c = 123.12;
riderHistoryList.add(riderHistory1);
Rider_History__b riderHistory2 = new Rider_History__b();
riderHistory2.Start_Time__c = now;
riderHistory2.Rider_Account__c = 'test';
riderHistory2.Rider_Rating__c = 13.2;
riderHistory2.Service_Type__c = 'test';
riderHistory2.Start_Location_Latitude__c = 12.123;
riderHistory2.Start_Location_Longitude__c = 123.12;
riderHistoryList.add(riderHistory2);
Database.insertImmediate(riderHistoryList);

可以查看到数据库的内容如下

删除时使用 deleteImmediate方法。

List<Rider_History__b> historyList = [SELECT Id,Rider_Account__c,Start_Time__c from Rider_History__b WHERE Rider_Account__c = 'test' ];
Database.deleteImmediate(historyList);

展示结果:

说完创建和删除接下来说查询。big object支持两种查询,同步 SOQL以及异步的SOQL。

如果 可以确定查询出来的数据量少想要在 apex中使用,我们可以使用SOQL进行查询,但是不是所有的SOQL语法可以使用。如果想要使用这种同步的SOQL,有以下的限制:

  • 当构建 序列的query时, query的第一个字段和最后一个字段间不要有空隙;
  • !=, LIKE, NOT IN, EXCLUDES, and INCLUDES 不支持;
  • 聚合函数不支持;
  • 不要使用Id字段进行查询;
  • 查询时必须包括索引字段,非索引字段不能作为where后查询的条件。

部分截图

异步SOQL以及在report / dashboard使用自行查看上方文档。

三. Big Object 限制

由于大对象的运行规模很大,它们不能完全像非大对象那样工作。使用大对象时,请记住以下几点。

大对象仅支持对象和字段权限。
部署大对象后,您将无法编辑或删除索引。要更改索引,请从一个新的大对象开始。
SOQL关系查询基于从选择字段列表中的大对象到标准或自定义对象的查找字段(不在过滤器或子查询中)。
大对象支持自定义Salesforce Lightning和Visualforce组件,而不支持标准UI元素(主页,详细信息页面,列表视图等)。
每个组织最多可以创建100个大对象。大对象字段的限制类似于自定义对象的限制,并取决于您单位的许可类型。
大对象不支持包含大对象,标准对象和自定义对象的交易。
为了支持大对象中的数据规模,您不能使用触发器,流程,流程和Salesforce应用。

总结:篇中简单描述 big object的使用,详情自行查看官方文档。篇中有错误欢迎指出,有不懂欢迎留言。

salesforce零基础学习(九十七)Big Object的更多相关文章

  1. 【转】【Salesforce】salesforce 零基础学习(十七)Trigger用法

    看本篇之前可以相应阅读以下Trigger相关文章: 1.https://developer.salesforce.com/page/Trigger_Frameworks_and_Apex_Trigge ...

  2. salesforce 零基础学习(十七)Trigger用法

    看本篇之前可以相应阅读以下Trigger相关文章: 1.https://developer.salesforce.com/page/Trigger_Frameworks_and_Apex_Trigge ...

  3. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  4. salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值

    注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-fr ...

  5. salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件

    在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...

  6. salesforce零基础学习(八十)使用autoComplete 输入内容自动联想结果以及去重实现

    项目中,我们有时候会需要实现自动联想功能,比如我们想输入用户或者联系人名称,去联想出系统中有的相关的用户和联系人,当点击以后获取相关的邮箱或者其他信息等等.这种情况下可以使用jquery ui中的au ...

  7. salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见

    项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...

  8. salesforce零基础学习(一百零五)Change Data Capture

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.232.0.api_streaming.meta/api_streaming/using ...

  9. salesforce零基础学习(一百一十一)custom metadata type数据获取方式更新

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.234.0.apexref.meta/apexref/apex_methods_syst ...

  10. salesforce 零基础学习(六十八)http callout test class写法

    此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...

随机推荐

  1. springboot之logback配置

    参考了https://blog.csdn.net/hxtxgfzs/article/details/79488163 Spring Boot默认情况下,当使用"Starters" ...

  2. MySql约束_设计_备份还原(资料二)

    今日内容 1. DQL:查询语句 1. 排序查询 2. 聚合函数 3. 分组查询 4. 分页查询 2. 约束 3. 多表之间的关系 4. 范式 5. 数据库的备份和还原 DQL:查询语句 1. 排序查 ...

  3. Jmeter引用外部jar包的几种方法

    总结记录下jmeter引用外部jar包的3种方法及其优缺点: 一.测试计划中添加目录或jar包到Classpath 操作:测试计划->添加目录或jar包到Classpath-->浏览导入j ...

  4. Python爬虫之反爬虫---使用随机User-Agent

    在编写爬虫时,大多数情况下,需要设置请求头.而在请求头中,随机更换User-Agent可以避免触发相应的反爬机制. 使用第三方库fake-useragent便可轻松生成随机User-Agent. 使用 ...

  5. 新版 C# 高效率编程指南

    前言 C# 从 7 版本开始一直到如今的 9 版本,加入了非常多的特性,其中不乏改善性能.增加程序健壮性和代码简洁性.可读性的改进,这里我整理一些使用新版 C# 的时候个人推荐的写法,可能不适用于所有 ...

  6. HYWZ 吴恩达-机器学习+神经网络反向传播

  7. tomcat源码--springboot整合tomcat源码分析

    1.测试代码,一个简单的springboot web项目:地址:https://gitee.com/yangxioahui/demo_mybatis.git 一:tomcat的主要架构:1.如果我们下 ...

  8. Solr常见异常

    RemoteSolrException: Expected mime type application/octet-stream but got text/html 解决方法: 在使用Tomcat部署 ...

  9. Python练习题 049:Project Euler 022:姓名分值

    本题来自 Project Euler 第22题:https://projecteuler.net/problem=22 ''' Project Euler: Problem 22: Names sco ...

  10. python数据结构之二叉树的遍历实例

    遍历方案   从二叉树的递归定义可知,一棵非空的二叉树由根结点及左.右子树这三个基本部分组成.因此,在任一给定结点上,可以按某种次序执行三个操作:   1).访问结点本身(N)   2).遍历该结点的 ...