2012-05-07 12 views
14

Wymagania projektu są dziwne na ten jeden, ale szukam, aby uzyskać pewien wgląd ...tworzenie dużej (12K + wierszach) tablicy w JavaScript

Mam plik CSV z około 12000 wierszy danych, około 12-15 kolumn. Konwertuję to do tablicy JSON i ładuję ją przez JSONP (musi działać po stronie klienta). Wykonanie dowolnego zapytania w zestawie danych zajmuje dużo czasu, aby zwrócić mniejszy, przefiltrowany zestaw danych. Obecnie używam JLINQ do filtrowania, ale zasadniczo po prostu przechodzę przez tablicę i zwracam mniejszy zestaw w oparciu o warunki.

Czy webdb lub indexeddb pozwoliłby mi na znacznie szybsze filtrowanie? Jakieś tutoriale/artykuły, o których wiesz, że rozwiązują ten szczególny rodzaj problemu?

+0

Aby zaoferować Państwu przydatne informacje, musielibyśmy sprawdzić, w jakim formacie JSON dysponujesz danymi i jakie zapytania/filtry próbujesz uruchomić. Dopasowanie między formatem danych (lub indeksami) a żądaną operacją filtrowania/zapytania zapewnia szybkość. – jfriend00

+0

Nie jestem familerem z webdb, ale może pomóc po stronie klienta sql. W końcu jednak jesteś na łasce silnika przeglądarki. –

Odpowiedz

11

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

Crossfilter JEST Biblioteka JavaScript do eksplorowania dużych zestawów danych wielowymiarowych w przeglądarce. Crossfilter obsługuje bardzo szybki (< 30ms) interakcji z skoordynowanych poglądów, nawet z zestawów danych zawierająca milionów lub więcej rekordów ...

+1

To jest niesamowita biblioteka, którą właśnie znalazłem i tak wyraźnie jest właściwą odpowiedzią na problem OP. –

3

To przypomina mi artykuł, w którym John Resig napisał o słownikach (prawdziwy słownik, a nie konstrukcja programistyczna).

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

Zaczyna implementacji po stronie serwera, a następnie pracuje nad rozwiązaniem po stronie klienta. Powinno to dać ci kilka pomysłów na sposoby, aby poprawić to, co robisz teraz:

  • buforowanie
  • Storage Lokalny
  • Rozważania pamięci
+0

Nie dokładnie jabłka na jabłka, ale mam nadzieję, że dadzą ci kilka pomysłów. –

3

Jeśli wymagają ładowania całego obiektu danych do pamięci, zanim zastosować niektóre przekształcić na nim , Pozostawiłbym IndexedDB i WebSQL poza miksem, ponieważ zazwyczaj zwiększają złożoność i zmniejszają wydajność aplikacji.

W przypadku tego rodzaju filtrowania biblioteka taka jak Crossfilter będzie miała długą drogę.

Gdzie IndexedDB i WebSQL mogą wejść w grę w zakresie filtrowania, gdy nie trzeba ładować, lub nie chcesz załadować całego zestawu danych do pamięci. Te bazy danych są najlepiej wykorzystywane do ich indeksowania wierszy (WebSQL) i atrybutów (IndexedDB).

W bazach danych przeglądarki można przesyłać strumieniowo dane do bazy danych po jednym rekordzie, a następnie przesuwać kursor, po jednym rekordzie na raz. Zaletą filtrowania jest to, że oznacza to, że możesz zostawić swoje dane na "dysku" (baza danych .leveldb w Chrome i .sqlite dla FF) i odfiltrować niepotrzebne rekordy jako krok lub filtr wstępny jako taki.