• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

몽고DB 속도 관련 문의 입니다.

20.02.10 09:45 작성 조회수 846

2

안녕하세요.

몽고DB에 데이터를 넣고 읽어보고 있습니다.

DB에 쌓여 있는 데이터는 

1,100,787 이정도 임의로 축적 되어 있습니다.

처음에 읽을때는 속도가 빠른것 같더니. 저정도 쌓여 지니깐. 

2~3초 정도 걸리는 것 같습니다.

    board = mongo.db.mqtt
    datas = board.find(query).skip((page - 1) * limit).sort("timestamp",-1).limit(10)

소스는 위처럼 동일하게 되어 있습니다.

알려주신 Robo 프로그램에서는..

50개 단위만 읽어서 그러는지 속도는 0.023 ~0.024 초 걸려서 엄청 빠른 속도로 읽어 지고 있습니다.

위에 프로그램을 ROBO처럼 바꾼다면 어떤식으로 변경이 되어야하나요?

답변 3

·

답변을 작성해보세요.

1

위에서 보여주신 파이썬 코드는 10개씩 읽는 내용이기에 Robo3T가 50개 단위만 읽어서 속도가 빠른거 같지는 않습니다.  일단 Robo3T는 예측하건데 C/C++로 만들어진 응용프로그램으로 예상됩니다. 그래서 아무래도 파이썬보다는 속도가 빠를수 있습니다만..

위의 문제에서는 일단 몇가지 시도를 해보자면 몽고DB에 인덱스 기능을 활용하여 쿼리 대상이 되는 필드에 index를 걸어주는 방법, find문을 최대한 단순하게 작성해서 속도를 측정해보는 방법 예를 들어....

board.find({}) => 속도측정

board.find(query) => 속도측정

board.find(query).limit(50) => 속도측정

board.find(query).limit(10) => 속도측정

board.find(query).skip((page-1) * limit).limit(50) => 속도측정

board.find(query).skip((page-1) * limit).sort("timestamp", -1).limit(50) => 속도측정

board.find(query).skip((page-1) * limit).sort().limit(50) => 속도측정

board.find(query).skip((page-1) * limit).limit(50).sort("timestamp", -1) => 속도측정

등등등 생각해볼 수 있는 경우의 수를 모두 다 해 문법을 작성하고 속도를 측정해보고 어떤 기능이 가장 무거운 동작을 하는지 확인해볼 수 있습니다. 물론 위에서 말씀드림 인덱스가 걸리고 안걸리고에서 큰 차이가 있을 수 있습니다.

데이터베이스는 정해진 정답이 없는 분야이고 데이터가 많아질수록 데이터베이스 구조를 어떻게 설계했느냐 쿼리를 어떻게 작성해서 성능을 극한으로 끌어내고 있느냐가 핵심인 분야입니다. 그래서 실제 업계에서 DBA 의 몸값이 하늘을 찌르는 이유이기도 합니다.

0

화이팅 입니다~~!!

0

답변 감사합니다.

모두 테스트를 진행 해봤습니다..

확실하게.. 알수 있었던것 같습니다.

속도측정이라는것을 알았습니다. ^^*

데이터 검색하는 부분 보다는

아래 두녀석의 큰 차이가 있다는 것을 알았습니다.

tot_count = board.find().count()

tot_count = board.find(query).count()

find() 안에 쿼리가 있고 없고의 차이에 따라서.. 

시간이 차이가 난다는 것을 알았습니다..

인터넷에 더 찾아보니깐 인덱스를 추가해야 한다는 그런 부분이 있어서..

또 찾아서 공부를 해봐야 할것 같습니다. 

답변 감사합니다. ^^*