JSON输入的性能问题
Posted
技术标签:
【中文标题】JSON输入的性能问题【英文标题】:Performance issue with JSON input 【发布时间】:2013-08-28 10:16:29 【问题描述】:我正在通过水壶从 mongodb 源加载 mysql 表。
Mongodb 表有超过 400 万条记录,当我运行水壶作业时,需要 17 个小时才能完成第一次加载。
即使对于增量负载也需要一个多小时。我尝试增加提交大小并为作业提供更多内存,但性能仍然没有提高。我认为JSON
输入步骤需要很长时间来解析数据,因此速度很慢。
我的转型中有这些步骤
-
MongoDB输入步骤
Json 输入
琴弦剪断
如果字段值为空
连接字段
选择值
表格输出。
从 postgre 中提取相同的 400 万条记录比 mongodb 快得多。 有没有办法可以提高性能? 请帮帮我。
谢谢, 深蒂
【问题讨论】:
您可以在 Kettle 中配置性能监控,并准确找出哪一步耗时最长。您还应该能够通过观察运行时的步骤指标来获得一个好主意。我怀疑你是对的,不幸的是,我对 Mongo 一无所知。我可能会尽我所能将提取物推入 Mongo 而不是 Kettle。 嗨,Brian,谢谢.. 是的,通过观察指标了解到 JSON 输入需要很长时间,因为它会将每一行作为每个事务的字符串解析。无法更改我的转换,因为它正在生产中运行,所以如果有人知道提高 JSON 步骤的性能,那就太好了,因为将来我们会将所有内容都转移到 mongo,这可能很关键。 我怀疑您可以直接对JSON Input
步骤执行任何操作。我认为您必须尝试减少从Mongodb Input Step
中选择的行数,可能是通过更改查询表达式。或者,您的集合中可能缺少索引。不确定您的意思是因为它正在生产中而无法更改您的转换。这是否意味着您无法更改任何内容,包括您的 JSON 输入步骤?
嗨,Brian .. 我的意思是我可以更改,但只想提高步进性能.. 你说过像把提取物推到 Mongo 而不是 Kettle 所以我告诉水壶工作正在生产中运行。但是,如果没有加快 JSON 步骤的选项,则无法执行任何操作。
【参考方案1】:
运行该步骤的多个副本。听起来你有 mongo 输入,然后是一个 json 输入步骤来解析 json 结果对吗?所以使用 4 或 8 个 json 输入步骤的副本(或更多,取决于 cpu),它会加快速度。
或者,您是否真的需要解析完整的 json,也许您可以通过正则表达式或其他方式提取数据。
【讨论】:
嗨谢谢我这样做了..但解析仍然很慢 我在几个地方听说如果您在 javascript 步骤中使用 Javascript 函数来解析 JSON,它的性能会明显更好。 Jquery 函数等。你试过吗?以上是关于JSON输入的性能问题的主要内容,如果未能解决你的问题,请参考以下文章
下载 JSON 时如何解决 UITableView 滚动性能滞后的问题?