2012-04-03 7 views
1

Ich möchte eine Listbox (Tabelle) mit fast 20 Millionen Zeilen anzeigen. Wie kann ich dies tun, mit geringerer Speicherauslastung und nicht meinen Server sterben lassen (nicht mehr zu reagieren).Riesige Daten in Listbox (Tabelle)

Auch Sie haben irgendeine theoretische Idee bitte teilen (ich werde versuchen, zu implementieren). Brauchen Sie dringend eine Lösung.

Ich weiß, dass ich nicht alle Zeilen auf einmal laden kann. Ich muss jedes Mal, wenn ich scrollte, neue Zeilen vom Server abfragen. Ich habe es versucht, aber meine Schriftrolle ist nicht glatt genug.

Dank & Grüße, Aman

+0

allen Ernst Sie mit der Menge von Daten, die Sie sprechen über i aussehen würde für eine vorkompilierte Komponente zu tun, das schwere Heben hier sonst abrufen können‘ Ich werde eine lange Zeit damit verbringen, Optomisierung zu betreiben, die einige der Komponentenhersteller Monate und Monate damit verbracht haben. –

+2

Eine Listbox oder Tabelle, die mit 20m * any * auf einmal geladen ist, ist ein bisschen verrückt, wenn sie sich auf eines der Tags in Ihrer Frage bezieht, was genau versuchen Sie zu tun? –

+0

@krystanhonour kann eine solche Open-Source-Komponente vorschlagen, die ich durchkommen kann? –

Antwort

3

Warum nicht nur die ersten 100 Einträge abrufen und dann, sobald der Client scrollt nach unten anhängen Sie weitere 100 Einträge und so weiter.

+0

nächste? Können Sie bitte mit mehr Details erklären. –

+0

Laden Sie 100 Einträge und überprüfen Sie die Position der Bildlaufleiste. Wenn die Bildlaufleiste am unteren Rand der Seite ist (alle Einträge wurden angesehen), senden Sie eine Ajax-Anfrage und fügen weitere 100 Einträge nach den bereits vorhandenen hinzu. – Eric

+0

In diesem Fall muss ich die Höhe jeder Zeile kennen, damit ich die Höhe meines Scroll entsprechend einstellen kann.aber ich habe Daten in meinen Reihen, so dass sie nicht in eine Zeile passen können, die sie in nächste Zeile gewickelt werden. –

0

Sie könnten http://books.zkoss.org/wiki/ZK Developer's Reference/MVC/View/Renderer/Listbox Renderer verwenden.

public void render(Listitem listitem, Object data, int index) 

zu starten, können Sie in Art und Weise implementieren machen, so dass Sie Element aus Datenquelle bei der Hand durch die Index-Methode aus machen zu machen bekommen. Sie können den Standard-Cache verwenden (wenn Hibernate vorhanden ist) oder einen benutzerdefinierten Cache verwenden, falls dies nicht der Fall ist (siehe auch EhCache).

@Erik Lösung ist wirklich schnell zu implementieren. Zum Hinzufügen könnten Sie eine Schaltfläche erstellen, so dass der Benutzer wissen würde, dass das Laden von mehr Daten etwas Zeit kosten würde und er sich überlegen würde, ob wirklich mehr geladen werden muss. Scrolling kann dazu führen, dass Sie Listbox nur für einen Moment auflegen.

Und immer eine obere Einschränkung für die maximale Anzahl der Datensätze, die Sie auf einmal zeigen - nicht verschmutzen Sie den Speicher Ihres Servers.

0

Make-Paging für die Tabellenwerte und bestimmte Anzahl von Datensätzen bei Bedarf abgerufen werden.

Die Verwendung kann dataTable pluging verwenden, um Seitenumbrüche für Datensätze zu erstellen.

Beachten Sie, dass Daten in synchroner und asynchronen Art und Weise mit dieser Bibliothek