질문에 답변이 많아질 때에 대한 질문입니다.

저는 데이터를 수집하는 게시판으로 파이보를 이용하고 있습니다.

하드웨어 아두이노에서 get 메소드를 통해서 자료를 주소 뒤에 붙여 보내고 답변으로 각 게시판에 저장합니다.
그런데 전송되는 데이터가 많아지면서 답변이 10만개가 넘어가니 게시판 시작 화면의 로딩 속도가 현저히 떨어졌습니다
answer_set | length 로 값을 호출하는 부분에서 질문 항목 10개에 있는 답변 전체를 SQL 쿼리하는 과정이 오래 걸리는 것 같았습니다.
질문에 달린 답변 개수 표시하는 방법을 어떻게 좀 더 빠른 속도로 처리할 수 있는 아이디어가 있을까 해서 글 올려 봅니다.

좋은 책 써 주셔서 정말 감사합니다.

장닭 387

M 2021년 11월 11일 9:33 오전

답변 페이징은 되어 있고 답변의 개수를 표시하는 부분만 문제가 되는 건가요? - 박응용님, 2021년 11월 8일 2:40 오후 추천 , 대댓글
@박응용님 댓글 주셔서 감사합니다. 질문 페이징은 되어 있고 질문 list가 나오는 게시판 화면에서 빨갛고 작은 글씨로 보이는 답변 개수가 5~6만개 쯤 되는 질문이 10개가 되니 불러오는 시간이 걸리고 조금 느려지는 문제가 발생했습니다. 질문 list에서 작은 글씨로 보이는 답변 개수 출력을 제거하니 속도가 전체적으로 빨라지는 것을 확인했습니다. 답변 페이징은 detail 화면에서 보이는 것인데 역시 페이징도 했습니다. - 장닭님, 2021년 11월 8일 6:05 오후 추천 , 대댓글
@장닭님 질문에 답변이 5~6만개쯤 된다면 평범한 게시물은 아닌것 같네요... 답변 개수가 의미가 없다면 제거하는게 좋을것 같구요, 필요하다면 Raw 쿼리를 직접 작성해야 할 것 같네요. - 박응용님, 2021년 11월 8일 6:09 오후 추천 , 대댓글
@박응용님 아두이노로 만들어진 20개 정도의 자료 수집 장치에서 1분에 한 개(10바이트 정도)씩 데이터가 전송되고, 이를 답변으로 저장하는 방식으로 시스템을 구성했습니다. 각 장치가 질문이 되고 1분마다 날아오는 데이터가 답변으로 등록됩니다. 그러다보니 2달 만에 거의 6~7만개 데이터가 AWS에 설치한 MariaDB에 쌓였습니다. 말씀 해주신 것처럼 Raw 쿼리로 해 보겠습니다. 선생님께서 써 주신 책이 큰 도움이 되었습니다. 그리고 답변 주심에 다시 한 번 감사드립니다. - 장닭님, M 2021년 11월 9일 9:52 오전 추천 , 대댓글
목록으로
1개의 답변이 있습니다. 1 / 1 Page

. question_views.py

@bp.route('/list/')
def _list():
result = list()
result.insert(0, 0)
page = request.args.get('page', type=int, default=1)
sql = text('select count() from user')
sqlresult = db.engine.execute(sql)
cnt = int(sqlresult.fetchone()[0])
for i in range(1, cnt):
     sql = text('select count(
) from answer where question_id=' + str(i))
     sqlresult = db.engine.execute(sql)
     result.insert(i, int(sqlresult.fetchone()[0]))
question_list = Question.query.order_by(Question.create_date.desc())
question_list = question_list.paginate(page, per_page=10)
return render_template('question/question_list.html', question_list=question_list, result=result, cnt=cnt)

. qustion_list.html

<tbody>
......................................
<td>
  <a href = "{{ url_for('question.detail', question_id=question.id) }}">{{ question.subject }}</a>
    {% if result[question.id] > 0 %}
     <span class="text-danger small ml-2">{{result[question.id]}}</span>
    {% endif %}
</td>
......................................
</tbody>

로 해서 빠르게 잘 처리 되었습니다. 아이디어 주셔서 감사합니다. 건강하세요.

장닭

M 2021년 11월 11일 9:29 오전