2012-05-07 4 views
14

Los requisitos del proyecto son impares para éste, pero estoy mirando para conseguir una cierta penetración ...El procesamiento de un (12K + filas) gran variedad de JavaScript

que tienen un archivo CSV con cerca de 12.000 filas de datos, aproximadamente 12-15 columnas Estoy convirtiendo eso en una matriz JSON y cargándola a través de JSONP (tiene que ejecutarse desde el lado del cliente). Se requieren muchos segundos para realizar cualquier tipo de consulta en el conjunto de datos para devolver un conjunto de datos más pequeño y filtrado. Actualmente estoy usando JLINQ para hacer el filtrado, pero básicamente solo estoy recorriendo el conjunto y obteniendo un conjunto más pequeño según las condiciones.

¿Webdb o indexeddb me permitirían hacer este filtrado significativamente más rápido? ¿Hay tutoriales/artículos que conozca que aborden este tipo de problema en particular?

+0

Para ofrecerle detalles útiles, deberíamos ver en qué formato JSON tiene los datos y qué consultas/filtros está tratando de ejecutar. La coincidencia entre el formato de datos (o índices) y la operación deseada de filtro/consulta es lo que le da velocidad. – jfriend00

+0

No soy famoso con webdb, pero SQL Server podría ayudar. Al final, sin embargo, estás a merced del motor del navegador. –

Respuesta

11

http://square.github.com/crossfilter/

Crossfilter es una Biblioteca de JavaScript para explorar grandes conjuntos de datos multivariantes en el navegador. Crossfilter apoya extremadamente rápidas (30 ms) < interacción con vistas coordinadas, incluso con conjuntos de datos que contiene una millones o más registros ...

+1

Esta es una biblioteca increíble que acabo de encontrar, y claramente la respuesta correcta para el problema de OP. –

3

Esto me recuerda un artículo que John Resig escribió sobre las búsquedas de diccionario (un diccionario real, no una construcción de programación).

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

Se comienza con las implementaciones de servidor, y luego trabaja en una solución del lado del cliente. Se le debe dar algunas ideas de maneras de mejorar lo que está haciendo en este momento:

  • almacenamiento en caché
  • almacenamiento local
  • Consideraciones de memoria
+0

No es precisamente manzanas con manzanas, pero espero que te dé algunas ideas. –

3

Si necesita cargar todo un objeto de datos en la memoria antes de aplicar alguna de transformación en lo , Dejaría IndexedDB y WebSQL fuera de la mezcla, ya que normalmente aumentan la complejidad y reducen el rendimiento de las aplicaciones.

Para este tipo de filtrado, una biblioteca como Crossfilter recorrerá un largo camino.

Donde IndexedDB y WebSQL pueden entrar en juego en términos de filtrado es cuando no necesita cargar, o no quiere cargar, un conjunto de datos completo en la memoria. Estas bases de datos se utilizan mejor por su capacidad para indexar filas (WebSQL) y atributos (IndexedDB).

Con las bases de datos del navegador, puede transmitir datos en una base de datos de a un registro a la vez y luego cursor a través de él, un registro a la vez. El beneficio aquí para el filtrado es que esto significa que puede dejar sus datos en "disco" (un .leveldb en Chrome y .sqlite base de datos para FF) y filtrar los registros innecesarios como un paso de prefiltrado o filtro en sí mismo.

Cuestiones relacionadas