Java Vaadin 8图表时间表,如何实现延迟加载值

Java Vaadin 8图表时间表,如何实现延迟加载值,java,lazy-loading,vaadin8,vaadin-charts,Java,Lazy Loading,Vaadin8,Vaadin Charts,问题描述 上下文 我正在尝试使用Vaadin图表可视化X-Y值的大型数据集。 我希望能够延迟加载将要加载的值,因为数据集很大。这可以通过设置修复窗口并允许用户更改日期来实现。因此,如果用户通过选择startDate和endDate,则只应加载这些值 当前方法 每个点建模为: public final class TimestampedDoubleValue{ private final long timestampInMillis; private final

问题描述

上下文

我正在尝试使用Vaadin图表可视化X-Y值的大型数据集。 我希望能够延迟加载将要加载的值,因为数据集很大。这可以通过设置修复窗口并允许用户更改日期来实现。因此,如果用户通过选择startDate和endDate,则只应加载这些值

当前方法

每个点建模为:

public final class TimestampedDoubleValue{
         private final long timestampInMillis;
         private final long value; 

         public TimestampedDoubleValue(long timestampInMillis,long value){
            this.value=value;
            this.timestampInMillis=timestampInMillis;
         }

         public final long getTimestampInMillis {return timestampInMillis;}
         public final long getValue {return value;}

}
我尝试采用一种类似于在Vaadin网格中实现延迟加载的方法

为了实现延迟加载,我创建了一个DataProvider和一个基于DataProvider的SeriesDataProvider

然而,我在图表中找不到任何关于延迟加载的文档或示例。我发现了一些关于DataProvider和SeriesDataProvider的注释,但它们没有明确提到延迟加载。示例中显示的ListDataProvider是一个没有延迟加载的内存中解决方案

此外,我无法确定这种方法是否可以用于延迟加载,以及在使用JavaAPI的Vaadin图表中是否可以进行延迟加载

例如,DataProviderSeries Javadoc明确规定如下:

请注意,即使使用延迟加载数据提供程序,本系列也将以一种急切的方式工作,并立即从提供程序加载所有数据

公共类TimeseriesDataProvider扩展了AbstractBackEndDataProvider{
公共最终DataProviderSeries getDataProviderSeries(){
最终DataProviderSeries DataProviderSeries=新DataProviderSeries(本);
setX(TimestampedDoubleValue::getTimestampInMillis);
setY(TimestampedDoubleValue::getValue);
dataProviderSeries.setAutomaticChartUpdateEnabled(true);
返回dataProviderSeries;
}
/*
*@see com.vaadin.data.provider.DataProvider#isinmomery()
*/
@凌驾
公共最终布尔值isInMemory(){
返回false;
}
/*
*@see com.vaadin.data.provider.AbstractBackEndDataProvider#fetchFromBackEnd(com.vaadin.data.provider.Query)
*/
@凌驾
受保护的流fetchFromBackEnd(最终查询){
返回FetchService.streamResults();
}
/* 
*@see com.vaadin.data.provider.AbstractBackEndDataProvider#sizeInBackEnd(com.vaadin.data.provider.Query)
*/
@凌驾
受保护的int sizeInBackEnd(最终查询){
返回FetchService.countInBackend();
}
}
问题

  • 是否可以在时间轴中使用延迟加载,如果可以,如何使用?DataProviderSeries的存在及其与DataProvider的连接表明它确实存在。然而,DataProviderSeries的Javadoc却提出了不同的建议。(见上文)

  • 在DataProvider系列中,有一个过滤器(上面代码中的F类型)作为参数在查询中传递。如何引入过滤器,使其作为参数传递


  • 它说“特殊的时间线图表支持在缩放时从大量基于时间的数据集中延迟加载。”但我无法找到关于这一点的任何进一步信息。这是一个非常有趣的发现,它为时间线提供了一些方向。也许随着vaadin10的发布,文档中有一个逐步推出的升级,希望其中包括一个图表的延迟加载示例。
    public class TimeseriesDataProvider<F> extends AbstractBackEndDataProvider<TimestampedDoubleValue, F> {
    
    public final DataProviderSeries<TimestampedDoubleValue> getDataProviderSeries() {
        final DataProviderSeries<TimestampedDoubleValue> dataProviderSeries = new DataProviderSeries<>(this);
        dataProviderSeries.setX(TimestampedDoubleValue::getTimestampInMillis);
        dataProviderSeries.setY(TimestampedDoubleValue::getValue);
        dataProviderSeries.setAutomaticChartUpdateEnabled(true);
    
        return dataProviderSeries;
    }
    
     /*
     * @see com.vaadin.data.provider.DataProvider#isInMemory()
     */
    @Override
    public final boolean isInMemory() {
        return false;
    }
    
    /*
     * @see com.vaadin.data.provider.AbstractBackEndDataProvider#fetchFromBackEnd(com.vaadin.data.provider.Query)
     */
    @Override
    protected Stream<TimestampedDoubleValue> fetchFromBackEnd(final Query<TimestampedDoubleValue, F> query) {
       return FetchService.streamResults();
    
    }
    
    /* 
     * @see com.vaadin.data.provider.AbstractBackEndDataProvider#sizeInBackEnd(com.vaadin.data.provider.Query)
     */
    @Override
    protected int sizeInBackEnd(final Query<TimestampedDoubleValue, F> query) {
                return FetchService.countInBackend();
    }
    
    }