2016-12-01 86 views
0

我必须执行2个查询:查询A很长(20秒),查询B很快(1秒)。 如果查询A正在运行,我希望保证查询B的执行速度也很快。 我如何实现这种行为?Nodejs和Sqlite。执行长查询

回答

0

由于SQLite的锁定方式,这可能并不容易。

来自官方的Appropriate Uses For SQLite文档:

SQLite支持同时读者的数量不受限制,但只允许在任何时刻一个作家的时间。对于很多情况,这不是问题。作家排队。每个应用程序都快速完成其数据库工作并继续前进,并且不会有超过几十毫秒的锁定。但是有一些应用程序需要更多的并发性,而这些应用程序可能需要寻求不同的解决方案。 [...] SQLite每个数据库文件一次只支持一个写入器。但在大多数情况下,写入事务只需要几毫秒,因此多个写入者可以轮流进行。 SQLite将处理许多人怀疑的更多写入并发性。尽管如此,客户端/服务器数据库系统,因为他们有一个长期运行的服务器进程来协调访问,通常可以处理比SQLite更多的写入并发性。

如SQLite文档所述,当您拥有如此多的数据以至于单个查询需要这么长时间时,它可能不是使用SQLite的最佳方式。

除了使用像PostgreSQL这样的真正的RDBMS之外,没有简单的解决方案可以解决这个问题。

而且由于您没有包含那些需要这么长时间的查询,所以除此之外,还无法告诉您任何事情。当然,也许你的查询可以优化,但我们不知道。

+0

查询是一个简单的select * from表,并且该表具有10000000条记录(例如)。 – user2957271