0

私は単純な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);
    }
}

私は何か間違ったことをしていますか、それとも更新クエリの実行にこれほど長い時間がかかるのは正常ですか?

4

2 に答える 2

2

すべてのコマンドを1つのトランザクション内にラップします。そうでない場合、コマンドごとに1つのトランザクション(関連するストレージ同期を含む)を取得します。

于 2012-10-29T16:23:27.500 に答える
0

1秒あたり12は遅いですが、不合理ではありません。MySQLのようなデータベースでは、HDDストレージディスクでは100/秒に近いと思います。

于 2012-10-29T15:48:42.927 に答える