AWS EC2 mongoDB - Эффективность скрипта - PullRequest
0 голосов
/ 26 февраля 2020

По запросу клиента вместо использования DynamoDB мы настроили mongoDB для экземпляра AWS EC2. Указанный экземпляр - m5a.large , который имеет 2 виртуальных ЦП и 8 ГБ памяти. Как указывалось ранее, на нем установлена ​​mongoDB, а также Python и несколько библиотек для работы с mon go.

Проблема возникла, когда мы начали заполнять коллекцию mon go csv примерно 2-3 мельница записей и 14 столбцов. (Около 400 МБ). Хотя экземпляр не останавливается и не выдает ошибку OOM, сценарий, заполняющий коллекцию, останавливается на уровне около 90% записей, и никаких ошибок не возникает.

Я полагаю, что ему есть, что делать со сценарием, который мы используем, чтобы сделать это, и мне было интересно, если бы кто-то мог дать мне руку помощи, предоставив мне другой, более эффективный способ сделать это или подтвердив, что это просто ограничение памяти экземпляра.

import json
from mongoengine import *
from app.config import *
import pandas as pd
from app.model import Users

import time

conn = connect(
    db=db_name,
    username=username,
    password=password,
    authentication_source=authentication_source,
    host=host,
)


if __name__ == "__main__":

    t0 = time.time()
    print("Time taken %8.8f seconds" % (time.time() - t0))

    # CSV to JSON Conversion
    df = pd.read_csv(
        "csv.csv",
        sep="|",
        encoding="latin1",
    )


    df = df.rename(
        columns={
            "c1":"C1",
        }
    )

    rows = df.to_json(orient="records")
    rows = json.loads(rows)

    Users.objects(cond=True).update(**{"cond": False})

    for row in rows:
        Users(row).register()
    print("Time taken %8.8f seconds" % (time.time() - t0))

Примечание. Класс Users наследуется от DynamicDocument компании mongoengine

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...