14

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

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

webdb 或 indexeddb 是否允许我更快地执行此过滤?您知道的任何教程/文章都可以解决这种特定类型的问题吗?

4

3 回答 3

12

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

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

于 2012-05-07T17:08:06.950 回答
3

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

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

他从服务器端实现开始,然后在客户端解决方案上工作。它应该给你一些想法来改进你现在正在做的事情:

  • 缓存
  • 本地存储
  • 内存注意事项
于 2012-05-07T16:10:52.873 回答
3

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

对于这种类型的过滤,像Crossfilter这样的库将大有帮助。

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

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

于 2012-05-08T00:04:31.497 回答