기본 콘텐츠로 건너뛰기

큰 JSON 파일 파싱 Python 라이브러리 성능 비교

큰 JSON 파일 파싱 Python 라이브러리 성능 비교

1. 개요

1.1. 이 문서의 목적

  • 큰 JSON 파일을 파싱할 때 메모리 사용량과 속도 측면에서 JSON 파싱 Python 라이브러리들을 비교해 봅니다.

1.2. 독자

  • 큰 JSON 파일을 파싱하여 처리하고자 하는 개발자

1.3. 사전 지식

  • Python 프로그래밍 기초
  • JSON 파일 형식

2. 준비

2.1. 테스트 환경

테스트를 위해 사용한 환경은 다음과 같습니다.

  • CPU: 12th Gen Intel Core i7-12700H x 20
  • Memory: 32GB
  • OS: Ubuntu 22.04.2 LTS

2.2. 데이터

샌프란시스코의 지리 정보를 담고 있는 City Lots San Francisco in .json 파일을 테스트 데이터로 사용합니다. 데이터의 JSON 구조는 아래와 같습니다.

{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "properties": {
                "MAPBLKLOT": "0001001",
                ...
                "LOT_NUM": "001",
                ...
            },
            "geometry": {
                "type": "Polygon",
                "coordinates": [
                    ...
                ]
            }
        },
        ...
        {
            "type": "Feature",
            "properties": {
                "MAPBLKLOT": "VACSTWIL",
                ...
                "LOT_NUM": "WIL",
                ...
            },
            "geometry": {
                "type": "Polygon",
                "coordinates": [
                    ...
                ]
            }
        }
    ]
}
  • 파일 크기: 181MB
  • features 속성의 배열 크기: 206560

2.3. 라이브러리

라이브러리 스트리밍 방식 여부 특징
json X 파이썬 기본 패키지에 포함
ujson X UltraJSON (순수 C로 작성하였고 빠름)
orjson X 빠르고 json보다 올바르다(correct)고 함
ijson O High-level, low-level 인터페이스 제공 (items, kvitems, parse)
json-streamer O 부분 입력 가능
bigjson O 필요할 때 파일로부터 읽음

2.4. 테스트 스크립트

다음 각각의 작업을 수행할 때마다 스크립트를 새롭게 시작하는 방식으로 메모리 사용량과 소요 시간을 측정합니다.

  • JSON 파일의 앞 부분에서 LOT_NUM 속성의 값 얻기
  • JSON 파일의 마지막 부분에서 LOT_NUM 속성의 값 얻기

테스트 스크립트는 python-lib-test에 있습니다.

3. 테스트 결과

JSON 파일의 앞 부분 LOT_NUM 값 얻기

라이브러리 메모리(MB) 속도(초)
json 855 2.96
ujson 1035.7 2.72
orjson 862.6 2.12
ijson.items() 14.4 0.00
ijson.parse() 14.8 0.00
json-streamer 17.3 0.00
bigjson 15.0 0.00

JSON 파일의 마지막 부분 LOT_NUM 값 얻기

라이브러리 메모리(MB) 속도(초)
json 855 2.94
ujson 1035.5 2.76
orjson 888.2 2.21
ijson.items() 15.2 2.10
ijson.parse() 14.8 2.79
json-streamer 17.5 22.87
bigjson 15.8 325.23

위 표를 보면 메모리 사용량 및 속도 측면에서 ijson이 가장 좋은 결과를 보여주고 있음을 알 수 있습니다.

중요!!!

  • 라이브러리 비교 순위는 JSON 데이터의 구조와 테스트 시나리오에 따라 달라질 수도 있습니다.

참고

  • JSON 파일을 처음부터 끝까지 파일 읽기(file read)만 수행하기
    • 소요 시간: 0.05초
  • Python RegEx 라이브러리(import re)를 사용하여 마지막 부분 LOT_NUM 값 얻기
    • 메모리 사용량: 12.2MB
    • 소요 시간: 0.15초

4. 더 읽어 볼만한 자료

  1. Processing large JSON files in Python without running out of memory by Itamar Turner-Trauring

Written with StackEdit.

댓글

이 블로그의 인기 게시물

Windows에 AMP와 MediaWiki 설치하기

1. 들어가기     AMP는 Apache + MySQL +  Perl/PHP/Python에 대한 줄임말이다. LAMP (Linux + AMP)라고 하여 Linux에 설치하는 것으로 많이 소개하고 있지만 Windows에서도 간편하게 설치하여 사용할 수 있다.       이 글은 Windows 7에 Apache + MySQL + PHP를 설치하고 그 기반에서 MediaWiki를 설치하여 실행하는 과정을 간략히 정리한 것이다. 2. MySQL     * 버전 5.6.12     1) 다운로드         http://dev.mysql.com/downloads/installer/         MySQL Installer 5.6.12         Windows (x86, 32-bit), MSI Installer         (mysql-installer-web-community-5.6.12.0.msi)     2) 다운로드한 MSI 파일을 더블클릭하여 설치를 진행한다.           설치 위치:                   C:\Program Files\MySQL               선택 사항:                       Install MySQL Products             Choosing a Se...

MATLAB Rutime 설치하기

MATLAB Rutime 설치하기 미설치시 에러 MATLAB Runtime 을 설치하지 않은 환경에서 MATLAB 응용프로그램이나 공유 라이브러리를 사용하려고 하면 아래와 같은 에러 메시지가 표시될 것입니다. 처리되지 않은 예외: System.TypeInitializationException: 'MathWorks.MATLAB.NET.Utility.MWMCR'의 형식 이니셜라이저에서 예 외를 Throw했습니다. ---> System.TypeInitializationException: 'MathWorks.MATLAB.NET.Arrays.MWArray'의 형식 이니셜라이저에서 예외를 Throw했습니다. ---> System.DllNotFoundException: DLL 'mclmcrrt9_3.dll'을(를) 로드할 수 없습니다. 지정된 모듈을 찾을 수 없습니다. (예외가 발생한 HRESULT: 0x8007007E) 위치: MathWorks.MATLAB.NET.Arrays.MWArray.mclmcrInitialize2(Int32 primaryMode) 위치: MathWorks.MATLAB.NET.Arrays.MWArray..cctor() --- 내부 예외 스택 추적의 끝 --- 위치: MathWorks.MATLAB.NET.Utility.MWMCR..cctor() --- 내부 예외 스택 추적의 끝 --- 위치: MathWorks.MATLAB.NET.Utility.MWMCR.processExiting(Exception exception) 해결 방법 이 문제를 해결하기 위해서는 MATLAB Runtime 을 설치해야 합니다. 여러 가지 방법으로 MATLAB Runtime 을 설치할 수 있습니다. MATLAB 이 설치되어 있는 경우에는 MATLAB 설치 폴더 아래에 있는 MATLAB Runtime 설치 프로그램을 실행하여 설치합니다. ...

Wi-Fi 카드 2.4GHz로만 동작시키기

Wi-Fi 카드 2.4GHz로만 동작시키기 별도의 Wi-Fi AP 장치를 두지 않고 아래와 같은 기기들로만 Wi-Fi 네트워크를 구성하고자 할 때 주변 기기들이 2.4GHz만 지원하기 때문에 PC에서 실행하는 AP가 항상 2.4GHz를 사용하도록 Wi-Fi 카드를 설정해 주어야 합니다. 기기 Wi-Fi 카드 주파수 대역 Wi-Fi Direct 지원 PC (Windows 10) 2.4GHz, 5GHz O 주변 기기들 2.4GHz X Wi-Fi 카드별 주파수 대역 선택 방법 Windows 시작 메뉴에서 설정 을 클릭합니다. Windows 설정 화면에서 네트워크 및 인터넷 을 클릭합니다. 설정 화면의 왼쪽 메뉴바에서 Wi-Fi 를 클릭합니다. 화면 오른쪽 관련 설정 구역에 있는 어댑터 옵션 변경 을 클릭합니다. 설정을 바꾸고자 하는 Wi-Fi 카드 항목을 선택하고 마우스 오른쪽을 누른 다음 속성 메뉴를 클릭합니다. 대화상자의 네트워킹 탭 화면에 있는 구성 버튼을 클릭합니다. 장치 속성 대화상자의 고급 탭 화면으로 이동합니다. 제시되는 속성 항목들은 제품별로 다르며 자세한 사항은 아래의 제품별 설명을 참고하여 값을 설정하시기 바랍니다. Intel Dual Band Wireless-AC 7265 기술 사양 주파수 대역: 2.4GHz, 5GHz 무선 표준: 802.11ac 주파수 대역 선택 장치 속성 대화상자에서 아래와 같이 선택합니다. Wireless Mode 1. 802.11a => 5GHz 4. 802.11b/g => 2.4GHz (이 항목 선택) 6. 802.11a/b/g => 2.4GHz, 5GHz Intel Dual Band Wireless-AC 8265 기술 사양 주파수 대역: 2.4GHz, 5GHz 무선 표준: 802.11ac 주파수 대역 선택 장치 속성 대화상자에서 아래와 같이 ...