我正在编写一个简单的 java 程序,它执行一个简单的任务:它输入一个文本文件夹,并返回每个文档频率最高的 5 个单词作为输出。
起初,我尝试在没有任何数据库支持的情况下这样做,但是当我开始遇到内存问题时,我决定改变方法并将程序配置为使用 SQLite 运行。现在一切正常,但是在数据库中添加单词需要很多时间(801 个单词需要 67 秒)。
这是我启动数据库的方式:
this.Execute(
"CREATE TABLE words ("+
"word VARCHAR(20)"+
");"
);
this.Execute(
"CREATE UNIQUE INDEX wordindex ON words (word);"
);
然后,一旦程序计算了文件夹中的文档(假设为 N),我将 N 个计数器列和 N 个频率列添加到表中
for(int i = 0; i < fileList.size(); i++)
{
db.Execute("ALTER TABLE words ADD doc"+i+" INTEGER");
db.Execute("ALTER TABLE words ADD freq"+i+" DOUBLE");
}
最后,我使用以下函数添加单词:
public void AddWord(String word, int docid)
{
String query = "UPDATE words SET doc"+docid+"=doc"+docid+"+1 WHERE word='"+word+"'";
int rows = this.ExecuteUpdate(query);
if( rows <= 0)
{
query = "INSERT INTO words (word,doc"+docid+") VALUES ('"+word+"',1)";
this.ExecuteUpdate(query);
}
}
我做错了什么,或者更新查询需要这么长时间才能执行是正常的?