Эффективное создание базы данных для анализа связей между информацией - PullRequest
0 голосов
/ 21 февраля 2011

Итак, я пытаюсь взять большое количество XML-файлов (ни один из них не настолько велик, и я могу разделить их по своему усмотрению.) Всего данных около 70 ГБ. Для справки: скрипт загрузки написан на python и использует psycopg2 для взаимодействия с таблицей postgres.

В любом случае, я пытаюсь разобраться с данными, которые работают примерно так. Счетчик отношений - это количество раз, когда два тега видны вместе, а количество тегов - это количество раз, когда тег был увиден. У меня уже есть все теги, просто они получают время, когда они появляются, и время, когда они появляются вместе, из xml, который стал проблемой.

         Tag Table                |              Relations Table              
 TagID      TagName   TagCount    |         tag1       tag2    relationCount  
   1         Dogs        20       |          1           2            5  
   2         Beagles     10       |          1           3            2  
   3         Birds       11       |          2           3            7  

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

Полагаю, я спрашиваю, есть ли у кого-нибудь идеи. Должен ли я создать какой-то буфер для хранения информации об обновлении и попытаться периодически использовать cur.executeall () и / или я должен каким-то образом реструктурировать базу данных. В любом случае, любые мысли по этому вопросу приветствуются.

1 Ответ

3 голосов
/ 21 февраля 2011

Если я понимаю, что «... я перебирал методы обновления», звучит так, как будто вы обновляете строки базы данных по ходу дела?Если это так, рассмотрите возможность написания некоторого кода, который передает XML, накапливает отслеживаемые итоги, выводит их в файл, а затем загружает этот файл с помощью COPY.

Если вы обновляете существующие данные, попробуйте что-нибудьнапример:

1) Передайте XML-файл (ы), чтобы сгенерировать все новые итоги из новых данных

2) Скопируйте их в рабочую таблицу - таблицу, которую вы очищали ранее ипосле каждой партии

3) Выполнить INSERT из рабочей таблицы в реальные таблицы для всех строк, которые не могут быть найдены, вставляя нули для всех значений

4) Выполнить UPDATE из рабочей таблицык действительным таблицам, чтобы увеличить счетчики.

5) Усечь рабочий стол.

...