次の形式の CSV ファイルから 1000 億の多次元時系列データポイントを Graphite に読み込もうとしています。
タイムスタンプ value_1 value_2 .... value_n
公式ドキュメントで高速読み込み方法を見つけようとしましたが、現在挿入を行っている方法は次のとおりです(私のコードベースはPythonにあります):
f = open(args.file, "r")
bucket_size = int(5000 / columns)
total_time = 0.0
insert_value = ""
for i in tqdm(range(rows)):
value = f.readline()[:-1].split(" ")
currentTime, args.format = get_datetime(value[0])
currentTime = (currentTime - datetime(1970, 1, 1)).total_seconds()
currentTime = int(currentTime)
for j in (range(columns)):
insert_value += "master." + args.format + ".dim" + str(j) + " " + value[j + 1] + " " + str(currentTime) + "\n"
if (i + 1) % bucket_size == 0 or i == rows - 1:
sock.sendall( bytes(insert_value, "UTF-8"))
insert_value = ""
sock.close()
f.close()
上記のコードが示すように、私のコードはデータセットの CSV ファイルを読み取り、5000 個のデータ ポイントのバッチを準備してから、sock.sendall
.
ただし、この方法はあまり効率的ではありません。実際、1,000 億のデータ ポイントをロードしようとしていますが、これには予想よりも時間がかかります。それぞれ 1500 列の 500 万行のみをロードするのに 40 時間かかり、まだ 15 時間かかります。
データセットをグラファイトにロードするためのより良い方法があるとほぼ確信しています。