我有一个具有气质(最好)连接的遗留数据库。此数据库上的数据可能每周更新一次。我的应用的用户只需要读取权限。
我遇到的问题是,偶尔会对数据库的查询返回nil,因此我的应用程序中会发生各种不好的事情。
有没有办法可以查询数据库,直到我得到有效的响应,然后将该响应存储在我的rails应用程序中?这样,存储的版本将返回给我的用户。那么,也许每周一次,我可以重新查询数据库,直到它返回一个有效的对象?
为了给这个添加复杂性,遗留数据库是sql server,所以我必须安装并使用rails-sqlserver,它运行得很好,但可能会以某种方式增加问题。
答案 0 :(得分:2)
您在请求周期中遇到的问题是,实际获取数据的请求可能会缓慢地运行(因为它需要请求直到结果不是nil,这可能需要一段时间) ,因此您的用户将敲击刷新按钮,只排队更多请求,直到您的SQL服务器或应用程序被淹没。
如果我这样做,我可能会设置Resque任务,以便每周或每天获取所需的所有数据(可能是数据库的完全转储)。将结果数据转储到数据存储区:如果您不特别关心持久性,请将本地数据库或redis或memcached等内容转储。因为它是异步的,所以您可以根据需要多次访问以获取正确的数据。在你的应用程序方面,甚至不要尝试连接到气质数据库;考虑对所有请求具有权威性的“中间”数据库。因此,如果那里没有数据,则假设它在SQL服务器上也不存在。
当然,这种方法的缺点是,如果SQL服务器有一个非常大的数据库,你不能只将它全部复制到一个更稳定的中间位置。您必须选择数据的子集或依赖于每个请求的缓存方法,正如您自己建议的那样......但是如果您能避免这种情况,我认为这不是最好的方法。