2016-05-27 11 views
3

blockchain Ich habe eine flache Datei mit jeder Zeile enthält Aufzeichnungen wie
Legen Sie eine Million Zeilen aus Flatfile

AX101 12345 PQR 101 
AX102 18390 XYZ 091 
AX101 81249 PQR 871 

Mein Setup ein paar Maschinen in einem Netzwerk auf Hyperledger mit Vagabund und Docker verbunden ist.

Test 1
Für diesen Test leite ich nur eine Validierung Peer, der die flache Datei mit über Millionen solcher Zeilen und jede Zeile als neuen Block gesetzt lesen sollte. Die Absicht ist, die Geschwindigkeit dafür zu testen. Was könnte der beste Weg sein, dies zu erreichen?

Ansatz 1: Der Code in golang sitzt innerhalb eines Smart-Vertrages
Ansatz 2 sein könnte: Ein separater „Leser“ in einer anderen Sprache, die die Daten zur Validiereinheit peer über APIs sendet (langsamer sein würde, ich denke)


Test 2
Once (hoffentlich), wenn alle Daten auf blockchain ist, ich brauche alle Einträge für sagen AX101 zu analysieren, ist die Geschwindigkeit kein Problem hier aber alle Einträge Abholung ist.

Alle Hinweise wären hilfreich!

Antwort

1

Diese Antwort vorausgesetzt, dass Sie sprechen über die Hyperledger Stoff:

Es gibt keine Möglichkeit, einen chaincode (Smart Vertrag) zu vermeiden, das Schreiben der Daten in die Datenbank hinzuzufügen. Alle Daten in der Blockchain gehören dem Chaincode, der sie erstellt hat, und können nur durch den Chaincode erreicht werden, der sie erstellt hat. Es gibt kein Konzept von geteilten Daten oder einfach nur Daten in die Blockchain zu schreiben. Sie müssen daher Approach 2 ausführen und die Daten über die Methode "add new record" (die Sie erstellen) an einen Chaincode senden.

Um auf die Daten zuzugreifen, würden Sie eine Abfragemethode für Ihren Chaincode erstellen. Sie können die Geschwindigkeit des Parsens in Test 2 durch die Art steuern, wie Sie die Daten speichern. Es gibt Godoc Dokumentation für die Datenbank-APIs zur Verfügung, die chaincode hier: https://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim

+0

Ja, versuche dies in Hyperledger für jetzt, aber es wäre großartig, dies auch in Ethereum zu erreichen. Ich werde Ihre Vorschläge versuchen und Ihnen Bericht erstatten. – bitxor

1

Test 1
Es gibt mehrere Argumente, warum Ansatz 1 nicht die beste Lösung ist. Wenn Sie zunächst versuchen, den Importvorgang in GoLang über den Smart-Vertrag auszuführen, wird dieser Import als einzelne Transaktion ausgeführt.
Egal, wo dieser Import (in "Init" oder in "Invoke" -Methoden Ihres Kettencodes) initiiert wird, in beiden Fällen stoßen Sie auf das Problem "Timeout".
Die zweite - dieser Ansatz ruiniert die Idee der Blockchain. Smart-Contract sollte keine Daten aus externen Quellen (Dateien) ziehen, da jeder sie ändern kann, so dass die gesamte Kette in einen inkonsistenten Zustand übergeht.

Test 2
ist Hyperledger nicht um eine Datenbank zu sein und „analysiert alle Einträge für etwa AX101“ ausgelegt ist nicht vorrangiges Ziel ist. zur Verfügung gestellte Beschreibung recht begrenzt ist, doch gibt es einige Ideen, wie zu „emulieren“ dieses Verhalten:

Mögliche Option 1: können Sie versuchen, „RANGE_QUERY_STATE“ zu verwenden - es wird nur funktionieren, wenn Sie Suche auszuführen versuchen, erster Teil der Zeichenfolge "AX101 ...."

Mögliche Option 2: Verwenden Sie" AX101 "als Schlüssel und {" 12345 PQR 101 "," 81249 PQR 871 "} als Wert. Diese Datenstruktur kann zum Zeitpunkt des Imports erstellt werden. Funktioniert nur, wenn Sie keine Abfragen mit einem anderen Teil der Zeichenfolge ausführen möchten.

+0

Danke Sergey. Ich stimme zu, dass der Ansatz die Idee der Blockchain komplett zerstört, aber ich teste dies in einer sicheren Umgebung, in der die Flat-Datei über einen vertrauenswürdigen Mechanismus erstellt wird. Die Grundidee ist nur, die Leistung ab sofort zu testen. In Bezug auf den Test 2, ist dies nicht, was Bitcoin-Netzwerk tut .. Parsen Ledger Informationen über eine bestimmte öffentliche Adresse und kommen mit verfügbaren Gleichgewicht? – bitxor

+1

@bitxor sollten Sie sich das etwas anders ansehen; Hyperledger verwendet die Blockchain, um seine Transaktionen aufzuzeichnen, daneben hat es RoxDB, einen Schlüssel-Wert-Speicher, um komplexere Datenstrukturen zu erhalten, die Sie dort durch "Aufruf-Transaktionen" einfügen können. Das Phrasierungs-verfügbare Gleichgewicht lässt mich an Kryptowährungen denken, was ein möglicher Einsatz von Hyperledger ist, aber ein sehr kleiner. In diesem Fall würden Sie tun, wie von Sergey in Option # 2 vorgeschlagen, wo Sie die öffentliche Kennung als Schlüssel und das Guthaben als Wert speichern. – jvdp