Übergeben eines sehr großen Arrays von solidity an web3

Ich habe ein großes Datenarray im BC. Das Array umfasst 15.000.000 ElementeCar struct

struct Car{
 string tag;
 uint mileage;
 string make;
 string model;
 address address;
 string country;
}

Ich muss nach einem suchen: bestimmtes Modell und
Millage zwischen X, Y und
Land gleich X und
Tag beginnt mit einem bestimmten Buchstaben
(es wird komplizierter).

Halten Sie es für eine gute Praxis, 15 Millionen Elemente an WEB3 zurückzugeben und in JS zu suchen?
Diese solide Suche wird viel Benzin kosten. und JS ist einfacher zu durchsuchen.

Wie schnell wird WEB3 diese Anzahl von Zeilen zurückgeben?

Danke

Antworten (1)

Das klingt haarig.

Hat die CarEinfügung ein Ereignis mit den relevanten Informationen ausgegeben? Wenn ja, dann kannst du .watches ab dem Block der ersten Einfügung machen. Das würde:

  • helfen Ihnen, die Speicherkosten in Javascript zu reduzieren
  • ermöglichen es Ihnen, bei jedem Absturz von einem neueren Block "neu zu starten".

Sehen Sie sich RxJs an, wie Sie einen Ereignisbeobachter in ein Observable verwandeln. Dann können Sie Filter und ähnliches anwenden, was Ihnen helfen würde.

So etwas nicht so Pseudo-Code:


Rx.Observable.create(observer => {
        const filter = myContract.LogCar();

        filter.watch((err, oneEvent) => {
            if (err) observer.onError(err)
            else observer.onNext(oneEvent);
        });

        // Cleanup logic
        return () => filter.stopWatching(console.error);
    })
    .filter(oneEvent => oneEvent.args.mileage.atLeast(10))
    .subscribe(
        console.log,
        console.error,
        () => console.log("completed"));
Vielen Dank, können Sie bitte erklären, wie eine Veranstaltung dabei helfen kann? Was passiert, wenn jemand eine neue Suchanfrage eingibt, werden alle Ereignisse bereits ausgelöst. bitte erkläre. Danke
Wenn Sie eine Suchanfrage ausführen möchten, ist die Blockchain selbst die falsche Datenstruktur. Um eine Suchabfrage auszuführen, müssen Sie alle Ereignisse in eine spezialisierte Suchmaschine importieren. Um alle Ereignisse zu extrahieren, können Sie denselben Code wie oben ohne den Filter verwenden.