成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何將Bitcoin比特幣區塊鏈數據導入關系數據庫

數據庫
在接觸了比特幣和區塊鏈后,我一直有一個想法,就是把所有比特幣的區塊鏈數據放入到關系數據庫(比如SQL Server)中,然后當成一個數據倉庫,做做比特幣交易數據的各種分析。想法已經很久了,但是一直沒有實施。最近正好有點時間,于是寫了一個比特幣區塊鏈的導出導入程序。

[[195168]]

在接觸了比特幣和區塊鏈后,我一直有一個想法,就是把所有比特幣的區塊鏈數據放入到關系數據庫(比如SQL Server)中,然后當成一個數據倉庫,做做比特幣交易數據的各種分析。想法已經很久了,但是一直沒有實施。最近正好有點時間,于是寫了一個比特幣區塊鏈的導出導入程序。

一、準備

我們要解析的是存儲在本地硬盤上的Bitcoin Core錢包的全量比特幣數據,那么首先就是要下載并安裝好Bitcoin Core,下載地址:https://bitcoin.org/en/download 然后就等著這個軟件同步區塊鏈數據吧。目前比特幣的區塊鏈數據大概130G,所以可能需要好幾天,甚至一個星期才能將所有區塊鏈數據同步到本地。當然如果你很早就安裝了這個軟件,那么就太好了,畢竟要等好幾天甚至一個星期,真的很痛苦。

二、建立比特幣區塊鏈數據模型

要進行區塊鏈數據的分析,那么必須得對區塊鏈的數據模型了解才行。我大概研究了一下,可以總結出4個實體:區塊、交易、輸入、輸出。而其中的關系是,一個區塊對應多個交易,一個交易對應多個輸入和多個輸出。除了Coinbase的輸入外,一筆輸入對應另一筆交易中的輸出。于是我們可以得出這樣的數據模型:

需要特別說明幾點的是:

1.TxId是自增的int,我沒有用TxHash做Transaction的PK,那是因為TxHash根本就不唯一啊!有好幾個不同區塊里面的***筆交易,也就是Coinbase交易是相同的。這其實應該是異常數據,因為相同的TxHash將導致只能花費一次,所以這個礦工杯具了。

2.對于一筆Coinbase 的Transaction,其輸入的PreOutTxId是0000000000000000000000000000000000000000000000000000000000000000,而其PreOutIndex是-1,這是一條不存在的TxOutput,所以我并沒有建立TXInput和TxOutput的外鍵關聯。

3.對于Block,PreId就是上一個Block的ID,而創世區塊的PreId是0000000000000000000000000000000000000000000000000000000000000000,也是一個不存在的BlockId,所以我沒有建立Block的自引用外鍵。

4.有很多字段其實并不是區塊鏈數據結構中的,這些字段是我添加為了接下來方便分析用的。在導入的時候并沒有值,需要經過一定的SQL運算才能得到。比如Trans里面的TotalInAmount,TransFee等。

我用的是PowerDesigner,建模完成后,生成SQL語句,即可。這是我的建表SQL:

  1. View Code 

三、導出區塊鏈數據為CSV

數據模型有了,接下來我們就是建立對應的表,然后寫程序將比特幣的Block寫入到數據庫中。我本來用的是EntityFramework來實現插入數據庫的操作。但是后來發現實在太慢,插入一個Block甚至要等10多20秒,這要等到何年何月才能插入完啊!我試了各種方案,比如寫原生的SQL,用事務,用LINQToSQL等,性能都很不理想。***終于找到了一個好辦法,那就是直接導出為文本文件(比如CSV格式),然后用SQL Server的Bulk Insert命令來實現批量導入,這是我已知的最快的寫入數據庫的方法。

解析Bitcoin Core下載下來的所有比特幣區塊鏈數據用的還是NBitcoin這個開源庫。只需要用到其中的BlockStore 類,即可輕松實現區塊鏈數據的解析。

以下是我將區塊鏈數據解析為我們的Block對象的代碼:

  1. View Code 

至于WriteBitcoin2Csv方法,就是以一定的格式,把Block、Trans、TxInput、TxOutput這4個對象分別寫入4個文本文件中即可。

四、將CSV導入SQL Server

在完成了CSV文件的導出后,接下來就是怎么將CSV文件導入到SQL Server中。這個很簡單,只需要執行BULK INSERT命令。比如這是我在測試的時候用到的SQL語句:

  1. bulk insert [Block] from 'F:\temp\blk205867.csv';  
  2. bulk insert Trans from 'F:\temp\trans205867.csv';  
  3. bulk insert TxInput from 'F:\temp\input205867.csv';  
  4. bulk insert TxOutput from 'F:\temp\output205867.csv'

當然在實際的情況中,我并不是這么做的。我是每1000個Block就生成4個csv文件,然后使用C#連接到數據庫,執行bulk insert命令。執行完成后再把這生成的4個csv文件刪除,然后再循環繼續導出下一批1000個Block。因為比特幣的區塊鏈數據實在太大了,如果我不分批,那么我的PC機硬盤就不夠用了,而且在導入SQL Server的時候我也懷疑能不能導入那么大批量的數據。

***,附上一張我正在導入中的進程圖,已經導了一天了,還沒有完成,估計還得再花一、兩天時間吧。

image

所有區塊鏈數據都進入數據庫以后,就要發揮一下我的想象力,看能夠分析出什么有意思的結果了。

責任編輯:武曉燕 來源: 博客園
相關推薦

2018-10-15 13:57:38

Hadoop數據庫MySQL

2021-01-11 22:43:14

區塊鏈比特幣貨幣

2019-09-29 19:28:13

區塊鏈比特幣加密貨幣

2019-11-26 09:21:49

區塊鏈比特幣虛擬貨幣

2017-12-25 23:32:23

2017-11-21 08:36:00

MongoDB關系型數據庫數據導入

2020-08-04 14:39:06

比特幣區塊鏈數字貨幣

2019-04-02 15:00:53

2021-01-18 11:09:42

區塊鏈比特幣工具

2021-08-06 12:50:43

區塊鏈比特幣虛擬貨幣

2018-08-23 10:33:03

區塊鏈比特幣數字貨幣

2020-06-22 09:10:00

區塊鏈比特幣網絡

2018-05-29 16:20:55

區塊鏈比特幣

2021-03-02 08:49:00

區塊鏈比特幣技術

2018-12-12 15:25:33

比特幣數字貨幣區塊鏈

2023-10-10 11:18:42

Spring數據庫

2018-04-02 15:06:53

比特幣區塊鏈ICO

2022-01-14 11:23:57

區塊鏈比特幣加密貨幣

2021-03-08 11:17:44

區塊鏈比特幣安全

2011-08-15 10:02:02

LEIDomino附件關系數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美在线观看免费观看视频 | 国产一区二区三区精品久久久 | 成人区精品 | 特级生活片| 久久精品亚洲精品国产欧美kt∨ | 免费播放一级片 | 国产精品一区在线 | 国产精品入口麻豆www | 成人在线观看中文字幕 | 亚洲国产一区二区三区 | 国产综合久久 | 艹逼网 | 久久久久国产一区二区三区四区 | 四虎影院新地址 | 欧美三区在线观看 | 罗宾被扒开腿做同人网站 | 日韩欧美成人精品 | 免费激情网站 | 国产精品不卡视频 | 久久久久久成人 | 美女久久 | 久久蜜桃av一区二区天堂 | 亚洲激情网站 | 国产在线看片 | 久久久无码精品亚洲日韩按摩 | 噜噜噜色网 | 欧美成人一区二区 | 一区二区视频免费观看 | 亚洲精品一区国语对白 | 91精品国产91久久久久游泳池 | 天天干天天操天天爽 | 国产女人第一次做爰毛片 | 国产激情免费视频 | 亚洲国产精品视频一区 | 欧美成年网站 | 一区在线观看 | 国产精品久久久久久久免费大片 | 国产99视频精品免视看9 | 亚洲综合婷婷 | 一级无毛片 | 一区二区三区高清 |