每个用户登录一个查询可能吗?

时间:2016-01-15 07:19:55

标签: mysql ruby-on-rails database model controller

很明显,当用户登录时,控制器会从数据库中提取用户的信息。在整个用户会话中,加载某些页面(例如他们的配置文件/设置/帖子)需要每次他或她想要查看它们时(通过每个控制器操作的用户实例变量)我的应用程序设置方式进行数据库查询。

我的问题是,有没有办法查询所有这些信息,以便所有视图/控制器全局访问,这样当用户去查看他们的信息时,不必每次都查询把更多的负担放在数据库上?

长话短说,我担心我的应用程序的可扩展性,这里的任何建议都会非常有用。

感谢。

2 个答案:

答案 0 :(得分:1)

  

加载某些页面,例如他们的个人资料/设置/帖子,每次他或她想要查看时都需要数据库查询

是的,这很明显。每次他请求哪个将由Web服务器单独处理

  

有没有办法查询所有这些信息,以便所有视图/控制器全局访问

基本上,我们可以,但这不是一个好的做法,可以提高性能:

  • Eager loading以避免N + 1次查询
  • Caching
  • 仔细检查代码库以删除冗余代码,冗余查询
  • 检测繁重的任务,考虑将其置于背景中
  • 整合Profiler Gem以识别&修复性能问题

答案 1 :(得分:1)

  

所有视图/控制器一次全局访问的信息

这是"云计算"无论Redmond或Redwood Shores的人告诉你什么,现在都不存在。

Rails建立在HTTP protocol上,stateless - 每次提交请求时,服务器都会忘记"你曾经存在过。

您提出的问题基本上是有状态应用程序的工作原理,我们在当前设置中没有这样做。有状态的一个很好的例子是DataTablessh

不幸的是,在Rails应用程序的范围内,没有简单的方法可以实现您想要的目标。

每次发送请求时,都会处理客户端session数据以构建数据对象,例如ftpcurrent_user等。除非您调用应用程序的多个实例(对于每个用户而言,您必须为所有记录(缓存)创建某种永久数据存储。

解决方法:

  • "In-memory"数据库
  • 存储"通用"缓存中的数据&围绕有状态数据的范围
  • 优化您的数据库查询(以对抗posts等)

-

如果你愿意,我可以解释每一个,我不喜欢大量的帖子,但它可能会给你一些想法。如果你发表评论,我会在必要时写一个更新。