2012-03-19 48 views
0

我有一个遗留数据库,有一个气质(最好)的连接。这个数据库上的数据每周更新一次。我的应用程序的用户只需要读取权限。从数据库查询导轨存储结果

我遇到的问题是,偶尔对DB的查询返回零,所以各种不好的事情发生在我的应用程序。

有没有一种方法可以查询数据库,直到我得到一个有效的响应,然后将该响应存储在我的Rails应用程序的某处?这样,存储的版本将返回给我的用户。那么,也许每周一次,我可以重新查询数据库,直到它返回一个有效的对象?

为了增加复杂性,遗留数据库是SQL服务器,所以我不得不安装和使用rails-sqlserver,它工作得很好,但可能以某种方式增加了问题。

回答

2

您在请求周期中遇到的问题是,实际提取数据的请求可能会缓慢运行(因为它需要请求直到结果不为零,这可能需要一段时间),所以你的用户会锤击刷新按钮,只是排队更多的请求,直到你的SQL服务器或应用程序被淹没。

如果我这样做,我可能会设置一个Resque任务来设置每周或每天获取所需的所有数据(可能是数据库的完整转储)。将结果数据转储到数据存储区:无论是本地数据库还是类似redis或memcached的数据存储区(如果您不特别关心持久性)。由于它是异步的,您可以根据需要多次获取数据提取权。在你的应用程序方面,甚至不要尝试连接到气质数据库;考虑对所有请求具有权威性的“中间”数据库。因此,如果数据不存在,则假定它在SQL服务器上也不存在。

当然,这种方法的缺点是,如果SQL服务器有一个非常大的数据库,你不能把它全部复制到一个更稳定的中间位置。您必须选择数据的一个子集或依赖于每个请求的缓存方法,正如您所建议的那样......但我认为如果您可以避免这种情况,那么这是最好的方法。

+0

我同意你的意见。你知道我在哪里可以找到有关从sql server db导入数据到mysql db的文档吗?我没有看太多的转换,因此我为什么认为自己被遗忘了db – 2012-03-19 16:56:14

+0

不幸的是我不......如果你让他们都通过ActiveRecord连接起来,你总是可以从一个数据库读取它并保存到另一个?这可能是一个很好的第二个问题,我不会回答,因为我没有很好的答案。 ;) – Veraticus 2012-03-19 17:21:30