Abgesehen von Array und Mapping Gibt es überhaupt eine Möglichkeit, eine große Anzahl von Benutzerinformationen in Ethereum Blockchain zu speichern?

Ich habe einen Smart Contract zum Speichern von Benutzerinformationen in der Ethereum-Blockchain. Für jede neue Transaktion wird ein Eintrag in die Karte oder das Array hinzugefügt. Dies sieht in Bezug auf die Lagerung zu kostspielig aus. Wenn ich eine Karte oder ein Array verwende, um 1 Lakh (100 KB) Benutzerinformationen zu speichern, muss ich für jede neue Transaktion einen neuen Eintrag zur Karte hinzufügen und 1 Lakh [vorhandene Transaktionen] im Status hinzufügen.

Gibt es eine andere Möglichkeit, dieses Problem zu optimieren, oder sind alle Smart Contracts nur auf diese Weise geschrieben?

Warum aktualisieren Sie die vorhandenen Benutzerinformationen nicht, um eine Duplizierung von Daten zu verhindern?
@ShawnTabrizi: Betrachten Sie den Fall, einen neuen Kunden hinzuzufügen, der noch nicht in der Liste ist.
nicht nur kostspielig, sondern es kann auch illegal sein, Benutzerinformationen in der Blockchain zu speichern, da einige Gesetze die Privatsphäre der Benutzer schützen.

Antworten (1)

Sie sollten keine großen Mengen an Metadaten in einer Blockchain speichern. Es impliziert Missbrauch, und die Kosten für viele tausend Replikate werden Sie davon abhalten, dies zu tun.

Es ist kein 1:1-Ersatz für eine Datenbank.

Eine häufig zu berücksichtigende Alternative ist die Verwendung einer Blockchain zur Authentifizierung von Dokumenten, die an anderer Stelle gespeichert sind. Dokumente beliebiger Größe können anhand eines in der Kette gespeicherten 32-Byte-Hash als authentisch nachgewiesen werden.

Eine Blockchain kann beispielsweise einen verteilten Echtheitsnachweis von Informationen liefern, die an anderen Orten gespeichert sind, die besser für die Lagerung schwerer Gegenstände geeignet sind.

Ich hoffe es hilft.

Ich speichere Dokumente in einem IPFS-Netzwerk und Hash in Blockchain. Zusammen mit Hash muss ich andere Benutzerinformationen speichern. Ich konnte sehen, dass die Leute entweder Karte oder Array als Speicher verwenden. Wenn ich eine Benutzerbasis von 1 Lakh habe, wäre die Kartengröße jeder neuen Transaktion die aktuelle Kartengröße (1 Lakh) + 1. Da in der Blockchain jede Transaktion angehängt wird, verbraucht diese Art der Speicherung viel Platz.
Nein. Die Kartierungseinsätze werden mit der Waage nicht teurer. Jeder kostet gleich viel, egal was vorher da war. Tatsächlich ist es wichtig, dass Sie die Kosten in jeder Größenordnung konsistent halten, damit Ihre App skaliert.
Danke Rob für die schnelle Antwort. Sie schlagen also für solche Anwendungen vor, besser mit Mapping zu arbeiten. Eigentlich ist dies meine erste Anwendung, die ich entwickle, also wollte ich den richtigen Speicheransatz kennen, um fortzufahren.
Ich benutze sie beide. Arrays werden auch nicht teurer. Es ist eine Iteration über Arrays, die um jeden Preis vermieden werden muss. Dieser Erklärer behandelt eine Art Schweizer Taschenmessermuster: medium.com/@robhitchens/solidity-crud-part-1-824ffa69509a
Angenommen, ich verwende 100 Bytes, um alle Benutzerinformationen zu speichern, und wenn ich eine Benutzerbasis von 1 Lakh habe, beträgt die Kartengröße 10 MB. Da die Ethereum-Blockchain den Status jedes Benutzers bei jeder Transaktion beibehält, benötigt jede Transaktion 10 MB internen Speicher. Ist mein Verständnis richtig? Wenn ja, ist das dann eine akzeptable Lösung?
Missverständnis. Blockchain behält den Zustand im Vertrag in der Kette bei. Transaktionen zeichnen Eingaben auf, die den Zustand ändern. Sie wiederholen den Zustand nicht redundant. Wie Sie angedeutet haben, wäre das furchtbar ineffizient. In Ihrem Beispiel würden Sie ~100 Bytes (128) für jede Einfügung schreiben. Die Speicherkosten würden sich in den Transaktionskosten (Gas) zeigen. Es würde weiterhin 100 (128) Bytes kosten, zusätzliche Datensätze in ein Mapping zu schreiben oder an ein Array anzuhängen. Die Kosten variieren nicht mit der Größe dessen, was vorher da war.