Списки слов для множества статей - матрица документов и терминов

У меня почти 150 тысяч статей на турецком языке. Я буду использовать статьи для исследования обработки естественного языка. Я хочу хранить слова и их частоту в статье после обработки статей.

Я храню их в RDBS сейчас.

У меня есть 3 таблицы:

Статьи -> article_id, text
Words -> word_id, type, word
Words-Article -> id, word_id, article_id, частота (индекс для word_id, индекс для article_id )

я буду запрашивать

  • ВСЕ слова в статье
  • частота одного слова в статье
  • Встречаемость слова во всех статьях и в каких статьях

У меня есть миллионы строк в таблице слов и статей. Я всегда работал с RDBS в этом проекте. начал с mysql и теперь использует оракул. Но я не хочу использовать оракул и хочу большей производительности, чем mysql.

Кроме того, я должен выполнять эту работу на машине с 4 ГБ оперативной памяти.
Просто, как сохранить матрицу терминов документа и сделать к ней какой-нибудь запрос? производительность необходима. могут ли «базы данных с ключом-значением» превзойти mysql по производительности? или что может побить mysql?

если ваш ответ зависит от языка программирования, я пишу код на python. Но C/C++, Java в порядке.


person mumino    schedule 25.12.2009    source источник


Ответы (2)


возможно, проверьте lucene (или Zend_Search_Lucene в php). это очень хороший двигатель FTS.

person jspcal    schedule 25.12.2009

Для 150 000 статей в таблице words_articles должно быть несколько сотен миллионов строк. Это управляемо, если вы правильно настроите MySQL.

Несколько советов:

  • Убедитесь, что ваши таблицы MyISAM, а не InnoDB.
  • Удалите поле id в таблице words_articles и сделайте (word_id, article_id) первичным ключом. Также создайте отдельные индексы для word_id и article_id в таблице words_articles:

    ALTER TABLE words_articles
    DROP PRIMARY KEY,
    ADD PRIMARY KEY (word_id, article_id),
    ADD INDEX (word_id),
    ADD INDEX (article_id);
    

    (выполнение всего в одном операторе alter дает гораздо лучшую производительность).

  • Создайте индекс для слова в таблице слов:

    ALTER TABLE words ADD INDEX (word);
    
  • Настройте мой.cnf. В частности, увеличьте размеры буфера (особенно key_buffer_size). my-huge.cnf может быть хорошей отправной точкой.

person Can Berk Güder    schedule 25.12.2009