这个项目的要求很奇怪,但我希望得到一些见解......
我有一个 CSV 文件,其中包含大约 12,000 行数据,大约 12-15 列。我将其转换为 JSON 数组并通过 JSONP 加载它(必须在客户端运行)。对数据集进行任何类型的查询以返回较小的过滤数据集需要很多秒。我目前正在使用 JLINQ 进行过滤,但我本质上只是循环遍历数组并根据条件返回一个较小的集合。
webdb 或 indexeddb 是否允许我更快地执行此过滤?您知道的任何教程/文章都可以解决这种特定类型的问题吗?
这个项目的要求很奇怪,但我希望得到一些见解......
我有一个 CSV 文件,其中包含大约 12,000 行数据,大约 12-15 列。我将其转换为 JSON 数组并通过 JSONP 加载它(必须在客户端运行)。对数据集进行任何类型的查询以返回较小的过滤数据集需要很多秒。我目前正在使用 JLINQ 进行过滤,但我本质上只是循环遍历数组并根据条件返回一个较小的集合。
webdb 或 indexeddb 是否允许我更快地执行此过滤?您知道的任何教程/文章都可以解决这种特定类型的问题吗?
http://square.github.com/crossfilter/(不再维护,请参阅https://github.com/crossfilter/crossfilter了解较新的分叉。)
Crossfilter 是一个 JavaScript 库,用于在浏览器中探索大型多元数据集。Crossfilter 支持与协调视图的极快 (<30ms) 交互,即使数据集包含一百万或更多记录...
这让我想起了 John Resig 写的一篇关于字典查找(真正的字典,而不是编程结构)的文章。
http://ejohn.org/blog/dictionary-lookups-in-javascript/
他从服务器端实现开始,然后在客户端解决方案上工作。它应该给你一些想法来改进你现在正在做的事情:
如果您需要在对其应用一些转换之前将整个数据对象加载到内存中,我会将 IndexedDB 和 WebSQL 排除在外,因为它们通常都会增加复杂性并降低应用程序的性能。
对于这种类型的过滤,像Crossfilter这样的库将大有帮助。
当您不需要或不想将整个数据集加载到内存中时,IndexedDB 和 WebSQL 可以在过滤方面发挥作用。这些数据库最适合用于索引行 (WebSQL) 和属性 (IndexedDB)。
在浏览器数据库中,您可以一次将一条记录流式传输到数据库中,然后通过光标一次一条记录。过滤的好处是,这意味着您可以将数据保留在“磁盘”上(.leveldb
Chrome 中的一个和.sqlite
FF 的数据库),并过滤掉不必要的记录,作为预过滤步骤或过滤本身。