2017-11-07 8 views
1

Flask/MongoDB를 백엔드로 사용하여 웹 사이트에 큰 속도 문제가 있습니다. 기본 요청 (예 : 1 명의 사용자 확보)은 응답하는 데 약 4 초가 걸립니다. 다음은 파이썬 코드 :Python (Flask) MongoDB 속도 문제

@users_apis.route('/profile/<string:user_id>',methods= ['GET','PUT','DELETE']) 
@auth_token_required 
def profile(user_id): 
    if request.method == "GET": 
     avatar = '' 
     if user_id == str(current_user.id): 
      if(current_user.birthday): 
       age = (date.today().year - current_user.birthday.year) 
      else: 
       age = '' 
      return make_response(jsonify({ 
        "id"  : str(current_user.id), 
        "username" : current_user.username, 
        "email" : current_user.email, 
        "first_name": current_user.first_name, 
        "last_name" : current_user.last_name, 
        "age"  : age, 
        "birthday" : current_user.birthday, 
        "gender" : current_user.gender, 
        "city"  : current_user.city, 
        "country" : current_user.country, 
        "languages" : current_user.languages, 
        "description" : current_user.description, 
        "phone_number" : current_user.phone_number, 
        "countries_visited" : current_user.countries_visited, 
        "countries_to_visit" : current_user.countries_to_visit, 
        "zip_code" : str(current_user.zip_code), 
        "address" : current_user.address, 
        "pictures" : current_user.pictures, 
        "avatar" : "", 
        "interests" : current_user.interests, 
        "messages" : current_user.messages, 
        "invitations" : current_user.invitations, 
        "events" : current_user.events 
       }), 200) 

그리고 내 MongoDB를 데이터베이스는 다음과 같이 만들 수 있습니다 : 선택한 사용자가 거의 비어 (친구도없고 이벤트, 아니 사진을 ... 없음).

class BaseUser(db.Document, UserMixin): 
username = db.StringField(max_length=64, unique=True, required=True) 
email = db.EmailField(unique=True, required=True) 
password = db.StringField(max_length=255, required=True) 
active = db.BooleanField(default=True) 
joined_on = db.DateTimeField(default=datetime.now()) 
roles = db.ListField(db.ReferenceField(Role), default=[]) 

class User(BaseUser) 
# Identity 
first_name = db.StringField(max_length=255) 
last_name = db.StringField(max_length=255) 
birthday = db.DateTimeField() 
gender = db.StringField(max_length=1,choices=GENDER,default='N') 
# Coordinates 
address = db.StringField(max_length=255) 
zip_code = db.IntField() 
city = db.StringField(max_length=64) 
region = db.StringField(max_length=64) 
country = db.StringField(max_length=32) 
phone_number = db.StringField(max_length=18) 
# Community 
description = db.StringField(max_length=1000) 
activities = db.StringField(max_length=1000) 
languages = db.ListField(db.StringField(max_length=32)) 
countries_visited = db.ListField(db.StringField(max_length=32)) 
countries_to_visit = db.ListField(db.StringField(max_length=32)) 
interests = db.ListField(db.ReferenceField('Tags')) 
friends = db.ListField(db.ReferenceField('User')) 
friend_requests = db.ListField(db.ReferenceField('User')) 
pictures = db.ListField(db.ReferenceField('Picture')) 
events = db.ListField(db.ReferenceField('Event')) 
messages = db.ListField(db.ReferenceField('PrivateMessage')) 
invitations = db.ListField(db.ReferenceField('Invitation')) 
email_validated = db.BooleanField(default=False) 
validation_date = db.DateTimeField() 

저는 6Go 램과 1 vCore, 2,4GHz의 데비안 서버를 보유하고 있습니다. 나는 내 서버에 요청 중 TOP을 사용하는 경우 내가 (검색 요청에 대해) 더 후 378ms 소요 요청

가 표시되지 않는 MongoDB를 위해 로그를 확인하는 경우 : 나는 1 초 97 %에 참조 요청하는 동안 Python 용 CPU 사용.

파이썬 서버 출력을 확인하면 : 옵션 요청과 요청 가져 오기 사이에 4 초가 있습니다.

답변

0

마침내 내 문제를 "해결"했습니다. 모든 문제는 @auth_token_required 때문인 것으로 보입니다. 프론트 엔드가 백엔드에 "headers.append ('Authentication-Token', currentUser.token);" 거대한 지연을 만들었습니다.

@login_required가 @auth_token_required를 대신했습니다. 쿠키를 사용 중입니다.

누군가 도움이되기를 바랍니다.