私は単純な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);
}
}
私は何か間違ったことをしていますか、それとも更新クエリの実行にこれほど長い時間がかかるのは正常ですか?