>백엔드 개발 >파이썬 튜토리얼 >FastAPI에서 JSON 데이터 검색 속도를 최적화하는 방법은 무엇입니까?

FastAPI에서 JSON 데이터 검색 속도를 최적화하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-18 22:58:30625검색

How to Optimize JSON Data Retrieval Speed in FastAPI?

FastAPI에서 JSON 데이터 검색 속도 최적화

FastAPI의 GET 엔드포인트에서 상당한 규모의 JSON 페이로드가 느리게 반환되는 것은 반복되는 문제입니다. json.loads()를 사용하여 파일에서 데이터를 전송하기 위해 json.dumps()를 사용하면 응답이 크게 지연됩니다. 반환 데이터를 사용하여 사용자에게 데이터를 보낼 수 있지만 더 효율적인 접근 방식이 있습니까?

문제:
처리 파이프라인은 처음에 pandas의 to_json을 사용하여 데이터를 JSON으로 변환합니다. () 함수를 사용하여 json.loads()를 사용하여 사전에 로드하고 마지막으로 다시 JSON으로 변환합니다. 이 다단계 변환 프로세스는 상당한 대기 시간을 발생시킵니다.

제안 솔루션:

먼저 FastAPI가 다음을 사용하여 반환 값을 JSON 호환 데이터로 변환한다는 점을 인식하는 것이 중요합니다. jsonable_encoder, 표준 Python의 json.dumps() 함수를 사용한 직렬화가 이어집니다. 이 2단계 프로세스는 느린 것으로 알려져 있습니다.

옵션 1: 대체 JSON 인코더 활용
orjson 또는 ujson과 같은 대체 JSON 인코더 사용을 고려하세요. 이러한 인코더는 기본 jsonable_encoder 및 json.dumps() 조합보다 성능이 뛰어납니다.

옵션 2: 사용자 지정 응답의 직접 반환
최적의 성능을 위해서는 사용자 지정 APIRoute 클래스를 사용하고 응답을 반환합니다. 물체. 이는 FastAPI의 기본 JSON 변환 프로세스를 우회합니다.

<code class="python">from fastapi.routing import APIRouter, APIRoute

class TimedRoute(APIRoute):
    ...

app = FastAPI()
router = APIRouter(route_class=TimedRoute)

@router.get("/custom-response")
def get_data():
    df = pd.read_parquet('data.parquet')
    return Response(df.to_json(orient="records"), media_type="application/json")

app.include_router(router)</code>

추가 고려 사항:

  • 스트리밍 응답: 처리하는 경우 스트림 응답 사용을 고려하세요. 유난히 큰 데이터 세트는 메모리 부족 문제를 일으킬 수 있습니다.
  • Dask 라이브러리: Dask를 활용하여 대용량 데이터를 효율적으로 처리하세요. .to_json()을 사용하기 전에 결과 Dask DataFrame을 Pandas DataFrame으로 변환합니다.
  • 파일 다운로드: 응답을 우회하여 파일로 다운로드해야 함을 나타내도록 Content-Disposition 헤더를 설정합니다. 브라우저 렌더링이 지연됩니다.

위 내용은 FastAPI에서 JSON 데이터 검색 속도를 최적화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.