在JavaScript中处理大型(12K +行)数组

时间:2012-05-07 16:06:31

标签: javascript json indexeddb webdb

这个项目的要求很奇怪,但我希望得到一些见解......

我有一个包含大约12,000行数据的CSV文件,大约12-15列。我正在将其转换为JSON数组并通过JSONP加载它(必须运行客户端)。在数据集上进行任何类型的查询都需要几秒钟才能返回较小的过滤数据集。我目前正在使用JLINQ进行过滤,但我基本上只是循环遍历数组并根据条件返回一个较小的集合。

webdb或indexeddb是否允许我以更快的速度进行此过滤?你知道的任何教程/文章都解决了这个特殊类型的问题吗?

3 个答案:

答案 0 :(得分:12)

http://square.github.com/crossfilter/(不再维护,请参阅https://github.com/crossfilter/crossfilter了解更新的分叉。)

  

Crossfilter是一个用于探索大型多变量的JavaScript库   浏览器中的数据集。 Crossfilter支持极快(<30ms)   与协调视图的交互,即使是包含数据集的数据集   百万或更多记录......

答案 1 :(得分:3)

这让我想起John Resig撰写的一篇关于字典查找的文章(真正的字典,而不是编程结构)。

http://ejohn.org/blog/dictionary-lookups-in-javascript/

他从服务器端实现开始,然后在客户端解决方案上工作。它应该为您提供一些改进现在正在改进的方法的想法:

  • 缓存
  • 本地存储
  • 内存注意事项

答案 2 :(得分:3)

如果您需要在对其应用某些转换之前将整个数据对象加载到内存中,我会将IndexedDB和WebSQL排除在外,因为它们通常会增加复杂性并降低应用程序的性能。

对于这种类型的过滤,像Crossfilter这样的库将会有很长的路要走。

IndexedDB和WebSQL可以在过滤方面发挥作用,当您不需要将整个数据集加载或不需要加载到内存中时。这些数据库最适合用于索引行(WebSQL)和属性(IndexedDB)的能力。

在浏览器数据库中,您可以一次将数据流式传输到数据库中一条记录,然后一次一条记录。过滤的好处是,这意味着您可以将数据保留在“磁盘”上(Chrome中的.leveldb和FF的.sqlite数据库)并过滤掉不必要的记录,作为预过滤步骤或过滤器本身。