守护进程和View同时访问SQLite数据库

时间:2011-03-23 18:03:44

标签: mysql ruby-on-rails sqlite concurrency locking

我有一个作为守护进程运行的rake任务,可以为新剧集搜索成千上万的播客RSS源。如果找到新剧集,则会将其写入数据库。如果它找到旧剧集的更改,它会将更改写入数据库。这个守护进程不断运行。

现在让我们假设用户转到特定播客的页面。我在视图中有一个ajax轮询(彗星)进程,它将使用delayed_job为给定的播客获取新剧集。

现在我一次只能运行其中一个。我可以运行守护程序或让用户触发delayed_job进程。我是Rails的新手,并不真正了解如何启用我需要的并发性。我没有在这里发布任何代码,因为我的问题在这一点上确实是概念性的。如何设计一个能够处理这种并发的应用程序?

我的印象是转换到MySQL可能会缓解其中的一些问题,但是,我觉得我在这里错过了一个关键的难题。任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:2)

你失踪的是这件事。 SQLite是一个基于文件的数据库,这意味着当进程访问它时,它会锁定文件。这就是为什么你一次只能做一件事,无论是你的守护进程更新数据还是访问它的视图。

解决方案是移动到正确的数据库,如您建议的MySQL。你已经远远超出了SQLite的功能,它并不意味着以你使用它的方式使用。