0

ビットコイン ウォレットに関連付けられた約 100 万件のトランザクション (送信トランザクションと受信トランザクションの両方) のトランザクション ID を含む .csv ファイルがあり、これを RStudio に tibble として読み込みました。今、各トランザクションの手数料をリストするテーブルに別の列を追加しようとしています。これは、API 呼び出しを使用して行われます。

For example, to get the fee for the txid 73336c8b2f8bbf9c4165de515765463d6e835a9f3f87bf822d8bcb23c074ae7f, I have to open: https://blockchain.info/q/txfee/73336c8b2f8bbf9c4165de515765463d6e835a9f3f87bf822d8bcb23c074ae7f and read the data there directly.

これは、最初の 500 トランザクションの手数料を記録するための現在のコードです。

library(readr)
library(curl)
tx <- read_csv("transactions.csv", col_names = c("txid", "amount"), skip = 0, n_max = 500)
tx$fee <- 0
for (i in 1:nrow(tx))
    tx$fee[i] <- scan(paste0("https://blockchain.info/q/txfee/", tx$txid[i]))
write_csv(tx, "tx_with_fees.csv")

明らかに、私の最大のボトルネックは、Web ページへのアクセスにかかる時間です。データの読み取りに使用される方法はほとんど問題ではないようです (curl、get、scan を試しました)。上記のコードでは、各トランザクションの手数料を記録するのに約 0.4 秒かかります。

次に行ったことは、単純に RStudio の 5 つのインスタンスを開き、各インスタンスで異なる 100 行のセットに対してコードを実行することでした。このようにして、各行を平均 0.1 秒で処理できました。これは速度が 4 倍向上していますが、単純に RStudio の複数のインスタンスを開くよりも効率的な並列化の方法があると確信しています。

それを行う最善の方法は何ですか?

4

0 に答える 0