Java 如何提高JSON解析的性能
我有一个场景,用户要上传一个zip文件。这个zip文件可以有4999个json文件,每个json文件可以有4999个节点,我正在解析和创建对象。最后,我将它们插入数据库中。当我测试这个场景时,我花了30-50分钟来解析 我在哪里寻找建议Java 如何提高JSON解析的性能,java,json,performance,parallel-processing,Java,Json,Performance,Parallel Processing,我有一个场景,用户要上传一个zip文件。这个zip文件可以有4999个json文件,每个json文件可以有4999个节点,我正在解析和创建对象。最后,我将它们插入数据库中。当我测试这个场景时,我花了30-50分钟来解析 我在哪里寻找建议 我想并行读取JSON文件:假设我有一批100个JSonfile,那么我可以有50个线程并行运行 每个线程将负责解析JSON文件,这可能会导致另一个性能瓶颈,因为我们要解析4999个节点。所以我想一次再读取100个节点,这将再次导致50个子线程 因此,系统中总
让我知道这种方法听起来是否合适?您所描述的不应该花费太多时间(30-50分钟来解析),而且一个具有~5k节点的json文件相对较小。 在大规模插入期间,瓶颈将出现在数据库中,尤其是在字段上有索引的情况下 因此,我建议:
我认为,性能问题可能来自:
- 在JSON解析和创建对象之后,每个线程都将对象放入CSV文件中
- 完成后,尝试将CSV导入数据库
- 我建议您使用图书馆。使用DSM,您可以轻松解析非常复杂的JSON文件,并在解析过程中对其进行处理。
您不需要等到所有JSON文件都在处理。我想这是你的主要问题。
顺便说一句:
它使用Jackson stream API来读取JSON,因此占用的内存非常少
示例用法可在以下答案中找到:
measure,别猜你说“我有一些代码;我怎样才能让它更快?”。您没有显示代码,也没有显示慢部分所在位置的度量。请使用探查器找出流程的哪个方面(方法调用堆栈)占用了大部分时间。将结果编辑到您的问题中。告诉我们您正在使用哪个库/框架进行JSON解析和数据库插入。向我们展示示例代码。没有这些信息,你就不能指望得到有用的答案,只能靠猜测。好的,衡量一下,这个过程中最耗时的部分是什么(记住阿姆达尔的low)2。如果JSON解析占用了大量时间,那么根本不要使用对象映射,使用基于事件/令牌/流的解析将新的insert添加到JDBC批处理中,并为每个节点动态添加PreparedStatement 3。调整数据库以提高插入的性能(运行前优化甚至删除索引、共享数据库、使用SSD等)。4.找到作业的最佳线程数,由于上下文切换、IO/内存总线和其他冲突,2500个线程可能会降低系统速度。。。