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}