在Rails中导出和/或显示多个记录

时间:2013-04-15 05:23:23

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我过去1。5年来一直在Rails工作(我的意思是认真工作)。来自.Net背景和数据库/ OLAP开发,我喜欢Rails的很多东西但是关于它的一些事情对我来说没有意义。我只需要澄清一个这样的问题。

我一直致力于教育机构的录取程序,这只是更大规模应用程序的一小部分。现在,对于管理员,我们需要显示所有已申请/已注册学生的列表(范围从1000到10,000),并且还提供将其导出为ex​​cel文件的方法。目前,我们只关注以CSV格式导出。

我的问题是:

  1. Rails是否意味着同时显示如此多的记录?

  2. will_paginate只能在Rails中对记录进行分页吗?据我所知,它仍然从DB获取所有记录,然后有选择地显示相关记录。回到.Net / PHP / JSP,我们用来创建存储过程,然后我们选择性地返回相关记录。因为使用存储过程是Rails中的已知问题,我们还有其他选择吗?

  3. 导出此数据的问题相同。我对该过程进行了基准测试,即在服务器上接收请求,执行查询和响应返回。 ActiveRecord的创作正在进行中。那是为什么?只有1000条记录,页面显示用户的连接超时。我的意思是,如果在处理1000条记录时连接超时,那么为什么要使用Rails或者它意味着Rails不适用于此类应用程序。我以前使用过TB的数据,从来没有遇到过这个问题。

  4. 我从未理解ORM技术的核心。比如,我们有一个表users,并且与多个其他表相关联,但是为了显示记录,我们只需要来自表users及其关联表admissions的数据,然后实际执行为其所有关联表创建对象。我知道,只有在我们使用关联时才会获取数据,但它是否会在事先创建所有对象?

  5. 我希望,这些问题不是独立的,并且符合SF的指导原则。

    谢谢。

    编辑:有什么帮助吗?我重新检查并再次进行基准测试,获得1000条记录,其中我们加入了4-5个不同的表(1000个用户,2-3个一对一关联,以及2-3个一对多关联),它是创建超过15000个对象。这是为了急切加载。至于延迟加载,它将是1000个用户查询加上一些20多个查询)。这些问题和应用的其他可能选择是什么?我知道,我有点碰到这个问题再次登顶!

1 个答案:

答案 0 :(得分:0)

Rails可以使用TB数据处理数据库。

  

will_paginate只能在Rails中对记录进行分页吗?

还有很多其他宝石,比如“kaminari”。

  

它从db中获取所有记录..

NO。它不会那样工作。例如,使用以下查询Users.all.page(1).per(10)

User.all不会触发db查询,它将返回一个代理对象。然后在代理上调用page(1)和per(10)(ActiveRecord :: Relation)。当您尝试从代理对象访问数据时,它将执行数据库查询。活动记录将累积您传递的所有条件和参数,并在需要时执行SQL查询。

转到rails控制台并键入u= User.all; "f";(第二个语句:“f”,是为了防止rails控制台在代理上调用to_s来显示结果。)

它不会触发任何查询。现在尝试u[0],它会触发查询。

  

ActiveRecord创作正在进行一段时间

1000条记录不应该花费太多时间。

  • 检查从db发出的sql查询数。寻找迹象 n + 1问题并通过急切加载来修复它们。
  • 检查任何cpu或内存密集型操作的记录序列化为csv格式。
  • 使用分析器并追踪大部分时间消耗的功能。