使用api获取数据时,最好将数据存储在另一个数据库中,还是最好在需要时随时获取数据?

时间:2016-09-09 11:26:05

标签: ruby-on-rails ruby

我正在使用TMDB api来获取电影片名和发行年份等信息,但我想知道是否需要创建一个额外的数据库以便在本地存储所有这些信息,而不是继续使用api获取信息?例如,我应该创建一个电影模型并致电:

film.title

通过这样做访问存储在其上的标题的本地数据库,或者我打电话:

Tmdb::Movie.detail(550).title

并通过这样做再次调用api?

3 个答案:

答案 0 :(得分:3)

在处理了大量Rails应用程序之后,对大约十几个其他应用程序进行了服务调用,缓存是最好的选择。数据库解决方案的问题是使其保持最新。每次拨打电话的问题是它太慢了。有一个中间立场。为此,您需要Ruby on Rails Low Level Caching

  

有时您需要缓存特定值或查询结果,而不是缓存视图片段。轨道'缓存机制非常适合存储任何类型的信息。

     

实现低级缓存的最有效方法是使用Rails.cache.fetch方法。此方法同时读取和写入缓存。仅传递单个参数时,将获取密钥并返回缓存中的值。如果传递了一个块,则块的结果将被缓存到给定的键并返回结果。

与您的用例相关的示例:

class TmdbService
  def self.movie_details(id)
    Rails.cache.fetch("tmdb.movie.details.#{id}", expires_in: 4.hours) do
      Tmdb::Movie.detail id
    end
end

然后,您可以将Rails应用程序配置为使用memcached或将数据库用于缓存,这并不重要。关键是你希望这个缓存的数据在某个时候到期,以确保你获得最新的信息。

答案 1 :(得分:0)

这是一个重大决定。如果您通过API获得的数据量不是很大,则可以将所有数据存储在数据库中。通过这种方式,您可以更快地获得数据,即使API关闭,您的应用程序也能正常运行。

如果您获得的数据量很大而且您没有存储所有数据的来源,那么您至少应该将数据库中最重要的数据存储为缓存。

如果您不自行存储任何数据,则您需要依赖数据来源,并且可能会有停机时间。

将数据存储在您身边的问题是数据更改时您需要同步。在这种情况下,将数据存储在您的身边作为缓存仍然可以更快地获得结果并定期同步数据。

答案 2 :(得分:0)

调用本地数据库比调用外部API更快。我希望本地数据库能在几毫秒内返回,而API可能需要几百毫秒。并且本地呼叫不太可能受到网络问题或停机时间的影响。

因此,我总是将API调用的结果缓存在本地数据库中,并偶尔使用API​​中的较新版本更新本地版本。

但最终它取决于您的要求:您需要实时还是缓存版本?您多久需要一次这些数据以及更新的频率? API的速度有多快,延迟是个问题? API是否有速率限制(每次请求的最大数量)?