【发布时间】:2019-01-17 18:12:45
【问题描述】:
我用python中的parallel_bulk函数写数据到elasticsearch,但是性能很低,我写10000条数据,耗时180s,我设置settings:
"settings": {
"number_of_shards": 5,
"number_of_replicas": 0,
"refresh_interval": "30s",
"index.translog.durability": "async",
"index.translog.sync_interval": "30s"
}
在 elasticsearch.yml 中,我设置了:
bootstrap.memory_lock: true
indices.memory.index_buffer_size: 20%
indices.memory.min_index_buffer_size: 96mb
# Search pool
thread_pool.search.size: 5
thread_pool.search.queue_size: 100
thread_pool.bulk.queue_size: 300
thread_pool.index.queue_size: 300
indices.fielddata.cache.size: 40%
discovery.zen.fd.ping_timeout: 120s
discovery.zen.fd.ping_retries: 6
discovery.zen.fd.ping_interval: 30s
但它并没有提高性能,我该怎么做? 我在windows10上使用elasticsearch6.5.4,并且只有一个节点,我从Oracle产生数据到elasticsearch。
【问题讨论】:
-
将数据从外部 db 传递到 es 的最快方法是转储 oracle db - 以 elastic.co/guide/en/elasticsearch/reference/6.2/… 的方式。创建 json 转储后,您可以使用 curl 批量命令在弹性中摄取它:elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html
-
要了解 json 转储的格式,请查看 wikipedia production elasticsearch dump dumps.wikimedia.org/other/cirrussearch/current/…