更新每个0.1秒的查询

时间:2012-10-29 15:43:34

标签: java sqlite

我正在编写一个简单的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);
    }
}

我做错了什么,或者更新查询执行这么长时间是正常的吗?

2 个答案:

答案 0 :(得分:2)

将所有命令包装在一个事务中,否则每个命令会得到一个事务(带有关联的存储同步)。

答案 1 :(得分:0)

每秒12秒是缓慢但不无道理的。使用像MySQL这样的数据库,我希望它能够通过HDD存储磁盘接近100 /秒。