我正在尝试将 1000 亿个多维时间序列数据点从具有以下格式的 CSV 文件加载到 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
.
但是,这种方法效率不高。事实上,我正在尝试加载 1000 亿个数据点,这比预期的要长,加载只有 500 万行,每行 1500 列已经运行了 40 小时,还有 15 小时才能完成:
我几乎可以肯定有一种更好的方法可以将数据集加载到 Graphite 中。