我正在为客户构建一个新的rails应用程序。他们已经有一个单独的rails应用程序来管理用户(包含所有标准的Devise字段),并且不希望在两个应用程序中维护用户,这是完全合理的。
我可以使用database.yml连接到他们的远程数据库,以获取连接详细信息和establish_connection:在我的用户模型中。它有效,虽然有点慢(通过公共互联网)。我担心依赖这个远程数据库查询的东西A LOT会严重降低我的应用程序速度。我也无法与远程数据库建立联接。
我的想法是在我的应用程序中复制用户表,并且每隔几个小时(甚至更频繁地)运行一次cron作业,使我的表与“master”保持同步。
有什么理由不这样做吗?从设计的角度来看,这是一个可怕的想法吗?
我应该提到我的数据库是postgres而远程数据库是mysql。我也开始阅读DbCharmer gem(http://dbcharmer.net/),但我还没有完全理解它。
- 编辑: -
我还应该提一下,我需要从远程数据库中读取其他表,而不仅仅是用户表。
答案 0 :(得分:1)
我建议在本地缓存他们的数据库,所以当你查找远程记录时,你在本地记录它(如果它存在远程)或你在本地记录否定结果如果它不存在远程 - 你缓存远程记录缺席的记录。请记住缓存阴性结果的时间少于积极结果。
然后,您可以查看本地缓存,看看是否有足够新鲜的结果返回,如果本地缓存的结果是陈旧的或者没有本地缓存的结果,则只查询远程。
这就是我亲自做的事情;我会缓存而不是复制和同步。不过,你可以通过定期将常用的东西预先提取到缓存中来组合这两种方法。
没有必要使用Pg作为本地缓存,你可以很容易地使用redis / memcached / what(我是一个Pg dev,所以我并不完全偏向于Redis)。