0

我有近 15 万篇土耳其语文章。我将使用文章进行自然语言处理研究。我想在处理文章后存储每篇文章的单词和频率。

我现在将它们存储在 RDBS 中。

我有 3 张桌子:

文章 -> article_id,text
Words -> word_id, type, word
Words-Article -> id, word_id, article_id, frequency (index for word_id, index for article_id )

我会查询

  • 一篇文章中的所有单词
  • 每篇文章一个词的频率
  • 单词出现在所有文章和哪些文章中

我在 word-article 表中有数百万行。在这个项目中,我一直使用 RDBS。从mysql开始,现在使用oracle。但是我不想用oracle,想要比mysql更好的性能。

此外,我必须在具有 4gb 内存的机器上处理这项工作。
简单地说,如何存储文档术语矩阵并对其进行查询?性能是必要的。“键值数据库”可以在性能上击败 mysql 吗?或者什么可以打败mysql?

如果您的答案编程语言取决于,我正在用 python 编写代码。但是 C/C++ , Java 没问题。

4

2 回答 2

0

也许查看lucene(或php 中的Zend_Search_Lucene)。这是非常好的 FTS 引擎。

于 2009-12-25T02:35:53.043 回答
0

对于 15 万篇文章,words_articles 表中必须有几亿行。只要您正确配置 MySQL,这是可以管理的。

一些提示:

  • 确保您的表是 MyISAM,而不是 InnoDB。
  • 删除 words_articles 表中的 id 字段并将 (word_id, article_id) 设为主键。此外,在 words_articles 表中为 word_id 和 article_id 创建单独的索引:

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

    (在单个 alter 语句中执行所有操作可以提供更好的性能)。

  • 在 words 表中为 word 创建索引:

    ALTER TABLE words ADD INDEX (word);
    
  • 调整 my.cnf。具体来说,增加缓冲区大小(尤其是 key_buffer_size)。my-huge.cnf 可能是一个很好的起点。

于 2009-12-25T03:12:30.333 回答