1P by neo 2023-11-06 | favorite | 댓글 1개
  • Go 프로그래밍 언어를 사용한 고성능 JSON 파서 구축 과정에 대한 기사
  • 스트리밍 작업 지원, encoding/json 패키지와의 호환성, 할당 없거나 제한된 API 제공을 목표로 하는 프로젝트
  • JSON 파싱의 시간 복잡성에 대해 설명하며, 입력을 처리하는 데 걸리는 시간의 하한은 입력의 크기임을 강조하는 기사
  • 바이트 스트림을 JSON 토큰 스트림으로 변환하는 토큰화 과정에 대한 기사
  • JSON 파일에서 데이터를 읽는 과정을 설명하며, io.Reader 사용의 어려움을 강조하는 기사
  • bufio.Reader와 유사하게 작동하지만 API가 더 효율적인 byteReader 개념 소개하는 저자
  • 어떤 문자가 토큰이고 어떤 문자가 단순히 공백인지 식별하는 스캔 과정에 대한 기사
  • 핫 패스에서 함수 호출을 피함으로써 스캐너의 성능을 향상시키는 방법에 대해 저자가 설명
  • 토큰 시퀀스가 유효한지 확인하는 디코딩 과정에 대한 기사
  • 메소드를 직접 저장하고 직접 호출하는 계산된 goto를 사용함으로써 디코더의 성능을 향상시킬 수 있다는 저자의 제안
Hacker News 의견
  • 고성능 JSON 파서 구축에 대한 상세 가이드 제공하는 기사
  • 저자는 JSON에 대해 명시적 토큰화가 필요하지 않으며, 파싱과 토큰화를 통합할 수 있다고 제안
  • 더 나은 성능을 위해 토큰화와 파싱에서 힙 할당을 피하는 것을 저자가 권장
  • JSON 라이브러리의 선택은 성능에 큰 영향을 미칠 수 있으며, 최대 3-10배의 차이가 날 수 있음
  • 직렬화 또는 역직렬화할 클래스가 컴파일 시간에 알려져 있다면, Jackson Java가 잘 작동하지만, 신중한 코딩과 프로파일링은 성능을 2배 향상시킬 수 있음을 기사에서 제안
  • 고성능 생산 환경에 대해, 저자는 Daniel Lemire의 작업이나 그것을 Go로 이식한 MinIO를 살펴보는 것을 권장
  • 저자는 또한 RapidJSON에서의 JSON 벤치마크 페이지를 언급
  • 토큰화에서 "쓰레기 공장" 문제에 대한 해결책을 논의하며, 이는 문자열 대신 byteslice에서 T로의 함수를 사용하는 것을 포함
  • 메모리 할당이 없고 매우 빠른 GraphQL 토큰화기와 파서를 구축하는 데 사용된 유사한 접근법을 저자가 언급
  • 저자는 계산된 goto라는 더 공간 효율적인 기법을 논의
  • 표준 라이브러리를 더 나은 API 디자인으로 개선할 수 있다고 저자가 제안하지만, 오류를 찾기 전에 구조를 반만 채우는 완전히 스트리밍 파서는 비현실적임
  • 대부분의 애플리케이션에서 전체 입력을 메모리에 가지고 있을 것으로 기대하는 것이 비현실적이라는 개념에 저자가 동의하지 않음
  • 기사는 Phil Pearl에게 감사의 인사를 전하며, GitHub의 Sonic 라이브러리를 살펴보는 것을 권장