개발자 99% 커뮤니티에서 수다 떨어요!
거두절미하고, 장고에서 대량의 데이터를 빠르게 작성하는 방법을 소개하겠습니다.
1. 기존 작성 방법
우선 기존의 User.objects.create로 10만 양병(?)을 해보겠습니다.
간단하게 유저네임을 0부터 99999까지 들어가고 패스워드를 12345678로 통일하여 10만 양병을 해 봅니다.
한 번 10만 양병(?)을 할 때마다 모든 유저 데이터를 다 깨끗하게 지우고서 3회 작성하는 데에 평균 98.45초가 걸렸습니다.
2. bulk_create로 작성하는 방법
소스를 조금 변경하였습니다. 크게 달라지지 않았습니다.start 시간을 재는 곳과 end 시간을 재는 소스 사이만 달라졌습니다.
list를 작성하도록 변경한 뒤에, 10만회의 반복을 할 동안 users_list에 User 클래스의 인스턴스를 10만번 넣어주되 똑같이 유저네임과 패스워드를 세팅합니다.
그런 뒤에 User.objects.bulk_create(users_list)로 위에서 작성한 list를 bulk_create 합니다.
벌크라는 말은 우리가 아는 그 벌크입니다. 대량...
bulk_create로 바꿨을 뿐인데 3회 평균 8.46초로 거의 10%의 소요시간으로 줄어들었습니다.
물론 서버에서 실시간 처리를 하는 것이 대부분이라 사용할 일이 없을수도 있겠으나 배치 처리를 하는 등 대용량의 처리가 필요할 때 매우 유용합니다.
bulk_create는 첫 번째 args로 list object를 받는데 상세 내용은 아래 doc을 참고 바랍니다.
https://docs.djangoproject.com/en/3.2/ref/models/querysets/#bulk-create
끝!