如何在d3js中处理大型数据集

时间:2013-10-02 18:42:25

标签: d3.js crossfilter dc.js

我有一个11 MB的数据集。每次加载文档时加载速度都很慢。

d3.csv("https://s3.amazonaws.com/vidaio/QHP_Individual_Medical_Landscape.csv", function(data) {
  // drawing code...
});

我知道,一旦将数据加载到浏览器中,就可以使用crossfilter对数据进行切片和切块。但在此之前,数据集很大。我只使用数据的聚合。看起来我应该在将数据发送到客户端之前预先处理服务器上的数据。也许,在服务器端使用crossfilter。关于如何处理/处理d3的大型数据集的任何建议?

3 个答案:

答案 0 :(得分:1)

您的数据是否动态?如果不是,那么你当然可以聚合它并将结果存储在你的服务器上。聚合只需要一次。即使数据是动态的,如果更改很少发生,那么只有在数据更改和缓存结果时才能从聚合中受益。如果您拥有高度动态的数据,以至于您必须在每次加载页面时对其进行新的聚合,那么在服务器上与客户端进行比较可能取决于您期望的并发用户数。许多并发用户可能会使您的服务器陷入困境。 OTOH,如果您的用户数量很少,那么您的服务器可能(可能?)比用户的浏览器具有更强的马力,在这种情况下,它将能够比浏览器更快地执行聚合。另请注意向用户发送11 MB的带宽成本。可能不是什么大问题......除非他们在移动设备上加载页面并进行操作。

答案 1 :(得分:0)

  • 尝试简化数据(也在Stephen Thomas的评论中提出)
  • 尝试将数据预解析为json。这可能会导致更大的文件(更多的网络时间),但解析开销更少(更低的客户端CPU)。如果您的问题是解析,这可以节省时间
  • 通过某种分片键(例如年份)来分解数据。限制该分片,然后根据需要按需加载其他数据文件
  • 按时间分解数据,但在UI中显示所有内容。将图表加载到默认视图(例如最近的时间范围),然后在附加文件到达时(或者当它们全部到达时)异步添加这些文件。

答案 2 :(得分:0)

服务器端(gZip)如何压缩。压缩后应该是几kb,浏览器将在后台解压缩。