我得到了一些文档(大小约为 300o/doc
),我想使用 python 库将它们插入到我的 ES 索引中,我在代码和使用 curl
之间有巨大的时间差异。很明显是正常的,但是我想知道时间是否可以提高(相对于时间的比例)
curl
选项大约需要 20 秒 插入和整个时间 10 秒 (用于打印 ES 结果但在插入 20 秒数据后)curl -H "Content-Type: application/json" -XPOST
"localhost:9200/contentindex/doc/_bulk?" --data-binary @superfile.bulk.json
python
选项,我到达了 1 分 20 至少,使用设置 10000/16/16
( chunk/thread/queue
)import codecs
from collections import deque
from elasticsearch import Elasticsearch
from elasticsearch.helpers import parallel_bulk
es = Elasticsearch()
def insert_data(filename, indexname):
with codecs.open(filename, "r", encoding="utf-8", errors="ignore") as fic:
for line in fic:
json_line = {}
json_line["data1"] = "random_foo_bar1"
json_line["data2"] = "random_foo_bar2"
# more fields ...
yield {
"_index": indexname,
"_type": "doc",
"_source": json_line
}
if __name__ == '__main__':
pb = parallel_bulk(es, insert_data("superfile.bulk.json", "contentindex"),
chunk_size=10000, thread_count=16, queue_size=16)
deque(pb, maxlen=0)
事实
[100-50000]/[2-24]/[2-24]
尝试了多个值问题
curl
命令 ?如果我只尝试解析部分,则需要 15 秒:
tm = time.time()
array = []
pb = insert_data("superfile.bulk.json", "contentindex")
for p in pb:
array.append(p)
print(time.time() - tm) # 15
pb = parallel_bulk(es, array, chunk_size=10000, thread_count=16, queue_size=16)
dequeue(pb, maxlen = 0)
print(time.time() - tm) # 90
最佳答案
经过我的测试:
关于python - 如何从用于弹性插入的python代码改进parallel_bulk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54962685/