表agent_task_base有12000000行
curl -XPUT 'localhost:9200/river/myjdbc_river1/meta' -d '{
"type" : "jdbc",
"jdbc" : {
"url" : "...",
"user" : "...",
"password" : "...",
"sql" : "select * from agenttask_base where status=1",
"index" : "my_jdbc_index1",
"type" : "my_jdbc_type1"
}
}'
curl -XPUT 'localhost:9200/river/myjdbc_river2/meta' -d '{
"type" : "jdbc",
"jdbc" : {
"url" : "...",
"user" : "...",
"password" : "..",
"sql" : "select * from agenttask_base where status=1",
"index" : "my_jdbc_index2",
"type" : "my_jdbc_type2"
}
}'
两条河一起执行,但最终结果是
my_jdbc_index1 has 10000000+ rows
my_jdbc_index2 has 11000000+ rows
为什么????
答案 0 :(得分:1)
在elasticsearch-jdbc-river(#143)的github上存在一个问题,它描述了如上所述的sam问题。尝试减少最大批量请求,并再次使用elasticsearch索引。
有关详细信息,请参阅:https://github.com/jprante/elasticsearch-river-jdbc/issues/143#issuecomment-29550301
我希望这会有所帮助
答案 1 :(得分:0)
我在经过多次试验和错误之后才想到这一点,因为我遇到了同样的问题
对我有用的是定义jdbc河流参数bulk_size和max_bulk_requests
curl -XPUT 'localhost:9200/river/myjdbc_river1/meta' -d '{
"type" : "jdbc",
"jdbc" : {
"url" : "...",
"user" : "...",
"password" : "...",
"sql" : "select * from agenttask_base where status=1",
"index" : "my_jdbc_index1",
"type" : "my_jdbc_type1",
"bulk_size" : 160,
"max_bulk_requests" : 5
}
}'
160的批量大小似乎是我的神奇数字,500的批量大小对于我的本地安装来说太高了,并且会返回关闭数据库连接的java.sql异常,但是我的Web服务器环境没问题
底线是您可以修改这些数字来调整性能,但通过设置它们,您应该看到您的索引doc数与您的sql结果数相匹配