当前位置: 首页 > 知识库问答 >
问题:

带有远程数据库的 Rails 应用程序 - 我应该在我的应用程序中复制还是远程连接

公西翼
2023-03-14

我正在为客户构建一个新的 rails 应用程序。他们已经有一个单独的轨道应用程序来管理用户(具有所有标准的Deevee字段),并且不希望在两个应用程序中维护用户,这完全有意义。

我能够使用database.yml连接到他们的远程数据库,以获得连接细节,并在我的用户模型中建立连接。它的工作,虽然有点慢(通过公共互联网)。我担心依赖这个远程数据库来获取经常被查询的东西会严重降低我的应用程序的速度。我也不能与远程数据库进行连接。

我的想法是在我的应用程序中复制用户表,并有一个cron作业,每隔几个小时(甚至更频繁)运行一次,使我的表与“主表”保持同步。

有什么理由不这样做吗?从设计的角度来看,这是一个糟糕的想法吗?

我应该提到我的数据库是postgres,远程数据库是mysql。我也开始阅读DbCharmer宝石(http://dbcharmer.net/),但我还没有完全理解它。

--编辑:--

我还应该提到,我需要从远程数据库读取其他表,而不仅仅是用户表。

共有1个答案

伍嘉
2023-03-14

我建议在本地缓存他们的数据库,所以当你查找远程记录时,你可以在本地记录它(如果它存在于远程),或者如果它不存在,你可以在本地记录一个否定的结果——你可以缓存远程记录缺失的记录。记住缓存否定结果的时间比肯定结果短。

然后,您可以查看本地缓存,查看是否有足够新鲜的结果可以返回,并且仅在本地缓存的结果过时或没有本地缓存的结果时才查询远程数据库。

这是我个人的做法;我宁愿缓存而不是复制和同步。当然,您可以通过定期将通常获取的内容预取到缓存中来结合这两种方法。

本地缓存不需要使用Pg,您可以轻松使用redis/memcached/任何东西(我是Pg开发人员,所以我并不完全偏向Redis)。

 类似资料:
  • 我在将 rails 2.3.5 应用程序连接到远程数据库时遇到问题。 在我的数据库.yml中,我有: 我得到的错误是: 无法通过套接字连接到本地 MySQL 服务器 (2) 我知道问题不在权限或用户设置上,因为当我使用相同的mysqlgem运行一个简单的ruby脚本时,它会起作用。此外,我的python脚本可以连接,我可以通过CLI与连接 我似乎无法让rails使用192.168.1.113而不是

  • 问题内容: 我遇到以下问题:当我尝试使用外部IP地址(PC的IP而不是本地IP的createTcpServer =在cmd.exe中运行ipconfig后我们看到的输出)时,发生以下错误: 服务器错误:异常打开端口“ 9092”(端口可能正在使用),原因:“ java.net.BindException:无法分配请求的地址:JVM_Bind” [90061-169] 但是,该端口未使用。我已经使用

  • 我正在另一台服务器上使用远程PostgreSQL,希望将Rails应用程序部署到AWS。我想让AWS与远程PostgreSQL数据库服务器通信。 我得到了一个错误: 致命:用户"postgres"的对等验证失败 虽然我在 我是如何被列入白名单的? 我在AWS控制台中看到了公共IP,并添加了它。我已经ping了我的AWS站点并添加了该IP。

  • 问题内容: 我构建了phoneGap应用程序,它是一个Facebook风格的应用程序,其想法是用户可以发布消息,而他们的朋友可以对此消息发表评论。该应用基于html,js和phoneGap。我有一台带有mysql数据库的服务器。我的问题是如何从远程数据库中拉出和推送数据。我是个初学者,所以我不太确定如何做到这一点。即使加载完成后,我也需要实时更新页面 我用Google搜索它,我意识到我需要使用Aj

  • 我的应用程序使用terracotta/ehcache作为hibernate二级缓存以及“自定义”应用程序缓存,当本地运行terracotta服务器并通过开发人员控制台连接到它时,我可以看到我的应用程序以及各种缓存和统计数据。当我将相同的设置部署到不同的服务器时,它看起来正常,但是当我将开发人员控制台连接到远程服务器时,我可以在拓扑节点下的服务器阵列中看到一个服务器,但是我没有“我的应用程序”节点,

  • 从。NET应用程序连接到远程MongoDb实例有点困难。 我创建了一个非常简单的控制台应用程序,它基本上是一个冒烟测试,并带回一个项目。如果我在运行MongoDb服务的服务器上运行它,它将与MongoDb进行对话,不会有任何问题。ConnectionString就是。 我已经为服务器上的27017端口创建了一个inboudd规则,甚至完全关闭了防火墙。 Mongo服务器的cfg文件非常基本: 干杯