Как оптимизировать цикл и хранение данных в базе данных SQLite? - PullRequest
0 голосов
/ 22 мая 2019

Issue

В настоящее время я пытаюсь создать базу данных комментариев и ответов от Reddit.Я следую этому руководству по проекту.

Я дошел до того, что файл комментариев reddit нужно прочитать и сохранить в базе данных SQLite.

Для обработки 100 000 строк требуется примерно 1 мсек, что, я думаю, можно улучшить.Я попытался переключить проект на мой SSD, который не улучшил скорость.Я также попытался увеличить файловый буфер, но это тоже не помогло.Я не вижу другого способа сделать чтение файла и цикл.Может кто-нибудь предложить более эффективный способ?

Код

with open('D:/Projects/Personal/AI/ChatBot/RC_{}'.format(timeframe), buffering=1000) as f:
    for row in f:
        row_counter += 1

        if row_counter > start_row:
            try:
                row = json.loads(row)
                parent_id = row['parent_id'].split('_')[1]
                body = format_data(row['body'])
                created_utc = row['created_utc']
                score = row['score']                    
                comment_id = row['id']                    
                subreddit = row['subreddit']
                parent_data = find_parent(parent_id)

                existing_comment_score = find_existing_score(parent_id)
                if existing_comment_score:
                    if score > existing_comment_score:
                        if acceptable(body):
                            sql_insert_replace_comment(comment_id,parent_id,parent_data,body,subreddit,created_utc,score)

                else:
                    if acceptable(body):
                        if parent_data:
                            if score >= 2:
                                sql_insert_has_parent(comment_id,parent_id,parent_data,body,subreddit,created_utc,score)
                                paired_rows += 1
                        else:
                            sql_insert_no_parent(comment_id,parent_id,body,subreddit,created_utc,score)
            except Exception as e:
                print(str(e))

        if row_counter % 100000 == 0:
            print('Total Rows Read: {}, Paired Rows: {}, Time: {}'.format(row_counter, paired_rows, str(datetime.now())))

Пример данных

{"subreddit":"SeattleWA","body":"They may just pull out of the Seattle market completely, at least until they have autonomous vehicles.","stickied":false,"gilded":0,"score":1,"author":"music4mic","link_id":"t3_5l79wh","retrieved_on":1485679711,"subreddit_id":"t5_2vbli","controversiality":0,"author_flair_css_class":null,"author_flair_text":null,"created_utc":1483228800,"distinguished":null,"parent_id":"t1_dbts1i6","id":"dbumnq7","edited":false}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...