본문 바로가기

Django

2022-06-10 개발일기 [Django, ORM]

반응형

오늘은 그리드에 뿌려줄 데이터가 700개 정도 됬을시 render 속도가 3초 ? 가량 으로 걸리길래 너무 오래걸려서 성능 개선이 필요했다. 애초에 Django Queryset은 pypy, numba 등이 접목이 안되길래 Django ORM으로 접근방식을 바꿨는데 데이터 자체가 serializer된다음 Dataframe으로 변형이 되기 때문에 지금와서 로직자체를 바꾸기는 어려웠고 QuerySet 자체를 불러올때로 접근을 두었다. 구글링 하던 도중

order_fast = orderlist.prefetch_related('PNAME')

을 이용하여 QuerySet 자체를 여러번 돌려버리니깐 속도적인 부분에서 뛰어난 성향을 보였다.! Python 자체는 컴파일을 지원을 안해주기 때문에 데이터 sort 부분이 매우 느리지만 Django에서는 여러가지 내장 필터들이 있기 때문에 3초에서 1초대로 줄이는것을 성공했다 ! 

너무 오래걸렸지만 그래도 한 단계 올라간거 같아서 기분이 좋다!!

 

개발 API

def sortgridlistdata(orderlist):
    order_fast = orderlist.prefetch_related('PNAME')
    import time
    st = time.time()
    result2 = []
    for order in order_fast:
        order_dict = {}
        order_dict['caterank'] = order.PNAME.product.category.rank
        order_dict['prodrank'] = order.PNAME.product.rank
        order_dict['ORDER_ID'] = order.ORDER_ID
        order_dict['username'] = order.USER_NAME
        order_dict['username2'] = order.RECEIVE_NAME
        order_dict['mallid'] = order.MALL_ID
        order_dict['quan'] = order.P_EA * order.PNAME.quan
        order_dict['name'] = order.PNAME.product.name
        order_dict['code'] = order.PNAME.product.code
        order_dict['catename'] = order.PNAME.product.category.name
        order_dict['unit'] = order.PNAME.product.unit
        order_dict['RECEIVE_ZIPCODE'] = order.RECEIVE_ZIPCODE
        order_dict['RECEIVE_ADDR'] = order.RECEIVE_ADDR
        order_dict['RECEIVE_CEL'] = order.RECEIVE_CEL
        order_dict['USER_CEL'] = order.USER_CEL
        order_dict['BOX_EA'] = 1
        order_dict['DELV_COST'] = order.DELV_COST
        order_dict['DELIVERY_METHOD_STR'] = order.DELIVERY_METHOD_STR
        order_dict['IDX'] = order.IDX
        order_dict['DELV_MSG'] = order.DELV_MSG
        order_dict['INVOICE_NO'] = order.INVOICE_NO
        order_dict['DELIVERY_ID'] = order.DELIVERY_ID

 

반응형

'Django' 카테고리의 다른 글

2022-07-25 개발일기 [Django]  (0) 2022.07.25
2022-06-15 개발일기 [Django]  (0) 2022.06.15
2022-06-08 개발일기 [Django, TOAST UI]  (0) 2022.06.08
2022-06-02 개발일기 [Django, Toast grid]  (0) 2022.06.02
2022-05-27 개발일기 [Django]  (0) 2022.05.27