我正在尝试将 1000 亿个多维时间序列数据点从具有以下格式的 CSV 文件加载到 KairosDB:
时间戳 value_1 value_2 .... value_n
我试图在官方文档中找到一种快速加载方法,这就是我目前进行插入的方式(我的代码库在 Python 中):
f = open(args.file, "r")
# Insert
i = 0
with tqdm(total=int(rows)) as pbar:
while i < len(range(rows)):
data = []
batch_size = 65000 / column
while i < len(range(rows)) and batch_size > 0:
batch_size -= 1
# print(batch_size)
i += 1
values = f.readline()[:-1].split(" ")
t = (get_datetime(values[0])[0] - datetime(1970, 1, 1)).total_seconds() * 1000
t = int(t)
for j in range(column):
data.append({
"name": "master.data",
"datapoints": [[t, values[j + 1]]],
"tags": {
"dim": "dim" + str(j)
}
})
r = requests.post("http://localhost:8080/api/v1/datapoints", data = json.dumps(data))
pbar.update(65000 / column)
pbar.close()
如上面的代码所示,我的代码正在读取数据集 CSV 文件并准备 65000 个数据点的批次,然后使用requests.post
.
但是,这种方法效率不高。事实上,我正在尝试加载 1000 亿个数据点,这比预期的要长,仅加载 300 万行,每行 100 列已经运行了 29 小时,还有 991 小时要完成!!!!
我确信有更好的方法将数据集加载到 KairosDB 中。对更快的数据加载有什么建议吗?