有数的缓存与刷新

1.为什么打开报告时,图表经常需要加载一段时间才能显示?

当用户使用到的数据量非常庞大时,系统对数据库查询或读写操作往往需要一段时间才能完成,此时页面便会显示正在加载中。为了解决这个问题,提高响应效率,当用户访问某份报告时,有数会将每张图表对应SQL语句的查询结果缓存在有数,再次访问时,会直接访问缓存数据,以减少访问图表所需的时间,极大提高图表的显示速度。

2.我访问报告时,什么情况下访问缓存?

用户在访问报告时,系统会自动判断该报告中各图表是否存在缓存,若存在,则会读取缓存数据,若不存在则访问数据库进行取数,并生成对应缓存。而当用户点击图表或报告的刷新按钮时,不管缓存是否存在,系统都会重新访问数据库以获得最新数据并生成对应缓存。

缓存.png

3.我该如何设置缓存有效期?

有数支持用户对数据模型和数据连接进行“缓存有效期”设置。“缓存有效期”是时间窗口的概念,根据频率将时间划分成不同的时间窗口,在当前时间窗口内的缓存都有效。例如,若首次访问时间为“0836分”,缓存有效期设置为“3小时”,则缓存的数据会在下一个三小时整数倍时间点失效,即“0900分”失效。9点以后再访问报告时,缓存已经失效,会重新访问数据库获取最新的数据并进行缓存。若用户所连接的MySQL数据库在每日的凌晨6点更新数据,可以将该数据连接的“缓存有效期”设置为“1天”,“缓存失效点”设置为“0600分”,这样既能提高访问性能,同时又要保证数据的时效性。

缓存有效期.png

4.我的数据每天早上8点更新,我想在9点看报告时能直接读取最新的缓存数据,我要怎么操作?

用户可以对报告或图表设置 “项目中心-资源管理-刷新计划”,系统会根据用户的设置,在指定的时间点自动访问数据库获取最新数据并生成对应缓存。

实例.png

5.我可以刷新模型或是连接吗?

用户可以对数据连接或数据模型添加刷新计划,相当于对使用到该连接(或模型)的所有报告添加了刷新计划,使用到该连接(或模型)的所有报告将按照刷新计划刷新报告图表的数据。但有数君建议,尽量不要对连接设置刷新计划,因为有数的刷新都是针对图表粒度的刷新,如果对连接设置刷新计划,就会对该连接下所有报告的图表进行刷新,而一般情况下,一个数据连接底下会有众多报告,实际情况中也不需要对全部报告在同一时间进行刷新。
同时,用户也可以直接在模型或连接的编辑页面点击刷新按钮,模型的刷新按钮意味着将模型的元信息修改同步至所有相关报告(元信息的修改包含:1.数据库中增加/删除了字段;2.数据库中字段的名称、类型、备注发生了修改。)同时,会刷新该模型对应报告的数据,也就是会将当前模型对应的报告缓存丢弃。另外,也会对将“查看宽表”的缓存丢弃,用户进行查看时会重新从数据库中获取数据;连接的刷新会触发使用该连接的图表的缓存失效,等到用户再次访问连接下的任何报告时,系统会自动获取最新数据并生成对应缓存。

640.png

6.如果我不设置缓存失效期或刷新计划,那缓存会失效吗?

保存在有数后台的缓存并不是永久有效的。一般而言,有数平台默认对缓存的保存期为5天,即5天以后该缓存会自动失效,当用户再次访问报告时,系统会自动访问数据库以获取最新数据,并生成对应的最新缓存。
当数据发生变化时,缓存就会自动失效。实际应用场景中,当报告中含有筛选器或参数配置项时,有数会自动对筛选器的默认值进行缓存(若用户未设置默认值,则对整个图表进行缓存),用户首次选中筛选器的某选项时,有数会生成对应的缓存,当用户再次选中时,则会直接读取缓存(相当于对每种选项配置都会保存一份缓存),例如,报告中用到动态时间筛选器控件时,若用户设置了自动显示前一日的数据,则数据会实现每日更新,对应缓存也会自动失效并生成最新缓存。

7.不管是立即推送还是定时推送,我收到邮件都会比设定时间晚10分钟?

在推送报告截图时,为了保证能够迅速截图,需要对图表进行10分钟时间的预加载,在这一过程中,系统会获取数据并将数据缓存下来,若用户设置推送的是缓存数据,则有数会判断当前数据缓存是否有效,若缓存已失效,则有数会自动访问数据库以获得最新缓存;若用户设置推送的是实时数据,则不管当前缓存是否有效,有数都会自动访问数据库以获取最新数据并生成对应缓存。10分钟以后开始截图,此时截图访问的是前面已经缓存下来的数据,并将结果推送给指定用户。若用户选择的是推送数据表格,则不会对图表进行预加载,用户会在设定时间收到推送。

定时推送.png

8.我的数据产出时间不能保证是每天固定的,能不能实现数据更新时自动刷新相关图表?

有数现在提供了“依赖刷新”的功能,用户可以调用 API 接口或利用数仓的数据订阅来推送数据产出信息,在相关表数据更新时自动执行刷新任务,这张表相关联的图表就会实现自动缓存,极大提高了缓存数据的实时性和有效性。

刷新计划.png