Java 更新查询,每次0.1秒

Java 更新查询,每次0.1秒,java,sqlite,Java,Sqlite,我正在编写一个简单的java程序,它完成一个简单的任务:输入一个文本文件文件夹,然后返回每个文档中频率最高的5个单词作为输出 起初,我尝试在没有任何数据库支持的情况下运行,但当我开始出现内存问题时,我决定改变方法,并将程序配置为使用SQLite运行。 现在一切正常,但只在数据库中添加单词需要花费大量时间(801个单词需要67秒) 以下是我如何启动数据库: this.Execute( "CREATE TABLE words ("+

我正在编写一个简单的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");
        }
for(int i=0;i
最后,我使用以下函数添加单词:

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);
    }
}
public void AddWord(字符串字,int docid)
{
String query=“UPDATE words SET doc”+docid+“=doc”+docid+“+1其中word=”+word+”;
int rows=this.ExecuteUpdate(查询);

if(rows12/s)速度很慢,但也不是不合理的。对于MySQL这样的数据库,使用HDD存储磁盘时,我希望速度接近100/s。

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

我刚刚用mysql运行了一个测试,对于相同数量的单词,它花费了37秒,这意味着每秒21次查询,这与你预期的100非常不同。表中的这些列有什么类型的索引?有什么类型的磁盘存储?索引是问题中显示的索引,磁盘存储是my computer hd,没什么例外我很惊讶它没有更快,但如果性能很重要,我通常会避免使用数据库。如果你能在Java内存中工作,你每秒会看到数以百万计的更新。我不是特别关注性能,但要等50分钟来解析50个文件似乎太多了……而且内存不是r实际上,我需要解析的文件数量非常大,并且经常出现“内存不足”错误。不应该因为引用而破坏AddWord函数?我不能错过INSERT commandtransactions是解决方案,现在一切都在不到1秒的时间内运行:)谢谢你不应该添加一列(或多列)您应该有另一个引用主word表并存储文档的表。