java—如何提高json解析的性能

afdcj2ne  于 2021-07-08  发布在  Java
关注(0)|答案(3)|浏览(549)

我有一个用户要上传zip文件的场景。这个zip文件可以有4999个json文件,每个json文件可以有4999个我正在解析和创建对象的节点。最终我将它们插入数据库。当我测试这个场景时,我花了30-50分钟来解析。
我正在寻找建议在哪里
我想并行读取json文件:假设我有一批100个jsonfile,那么我可以有50个线程并行运行
每个线程将负责解析json文件,这可能会导致另一个perf瓶颈,因为我们要解析4999个节点。所以我想一次再读取100个节点,这会再次导致50个子线程
因此,系统中总共将有2500个线程,但应该有助于并行执行大约25000000个连续操作。
让我知道这个方法听起来好还是不好?

xxhby3vn

xxhby3vn1#

我认为,性能问题可能来自:
json解析和创建对象
向数据库插入数据:如果插入多次,性能会降低很多
如果你运行2500个线程,如果你没有太多的cpu,这可能是无效的,因为开销可能会增加。根据您的硬件配置,您可以定义线程数。
为了向数据库中插入数据,我建议如下:
每个线程在json解析和创建对象之后,将对象放入csv文件中
完成后,尝试将csv导入db

aiazj4mn

aiazj4mn2#

您所描述的内容不应该花费太多时间(解析30-50分钟),而且一个具有~5k个节点的json文件相对较小。在大规模插入期间,瓶颈将出现在数据库中,尤其是在字段上有索引的情况下。
所以我建议:
不要把时间浪费在线程上—在您的情况下,解包和解析JSON应该很快,关注于bath插入并正确地执行:1000+批处理队列和之后的手动提交。
导入前禁用索引,尤其是全文索引,导入后启用(+重新索引)

ufj5ltwl

ufj5ltwl3#

我建议您使用dsm库。使用dsm,您可以轻松地解析非常复杂的json文件,并在解析期间对其进行处理。你不需要等到所有的json文件都在处理。我想这是你的主要问题。顺便说一句:它使用jackson流api来读取json,所以占用的内存非常少。
示例用法如下:
java—解析巨大(超大)json文件的最佳方法

相关问题