0

J'ai près de 150k articles en turc. J'utiliserai des articles pour la recherche sur le traitement du langage naturel. Je veux stocker les mots et la fréquence d'entre eux par article après le traitement des articles.Listes de mots pour beaucoup d'articles - matrice de document-terme

Je les stocke maintenant dans RDBS.

J'ai 3 tables:

articles -> article_ID, texte
Mots -> word_id, type, mot
mots-article -> id, word_id, article_ID, fréquence (index word_id, index pour article_id)

J'interrogera

  • tous les mots dans un article
  • une fréquence de mot par articl e
  • occurrences de mots dans tous les articles et dans lesquels des articles

J'ai des millions de lignes dans le tableau des mots-article. J'ai toujours travaillé avec RDBS dans ce projet. commencé avec mysql et en utilisant oracle maintenant. Mais je ne veux pas utiliser Oracle et je veux de meilleures performances que mysql.

De plus, je dois gérer ce travail dans une machine avec 4 Go de RAM.
Simplement, comment stocker la matrice de document-terme et faire une requête sur elle? la performance est nécessaire. Est-ce que les «bases de données à valeur-clé» peuvent battre MySQL à la performance? ou qu'est-ce qui peut battre mysql?

Si votre langage de programmation de réponse dépendait, j'écris du code en python. Mais C/C++, Java est ok.

Répondre

0

Pour les articles 150k, vous devez disposer de quelques centaines de millions de lignes dans la table words_articles. C'est gérable, tant que vous configurez correctement MySQL.

Quelques conseils:

  • Assurez-vous que vos tables sont MyISAM, InnoDB pas.
  • Supprimez le champ id dans la table words_articles et définissez (word_id, article_id) la clé primaire. En outre, créer des index séparés pour word_id et article_ID dans la table words_articles:

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

    (faire tout en une seule instruction alter donne de meilleures performances).

  • Créer un index pour mot dans la table des mots:

    ALTER TABLE words ADD INDEX (word); 
    
  • Tweak my.cnf. Plus précisément, augmentez la taille des tampons (en particulier key_buffer_size). my-huge.cnf pourrait être un bon point de départ.

Questions connexes