处理大型ActiveRecord对象设置为二进制数据

时间:2009-11-20 16:06:37

标签: ruby-on-rails ruby binary blogs

我在处理ActiveRecord模型类型的大量记录对象时遇到问题(记录是从复杂的操作中提取但是来自同一个表),我想在控制器操作之间传递该对象集。所以我有几个解决方案,但工资是选择哪种方式。更简单但更丑陋的解决方案是将其保存在会话中。但正如我所知,在会话中保存大型对象集显然会降低应用程序性能,因为频繁的序列化和反序列化过程(序列化耗时我猜测来自Web服务 - SOAP和二进制格式化)。似乎很有希望的第二个选项是将所有这些ActiveRecord模型对象保存为数据库中的博客,并且通过一个查询,我们可以检索所有并且可以使用该数据集执行必要的操作。但是我不知道如何在从数据库中检索它之后迭代所有对象,因为它仍然是二进制对象格式。调用检查方法显示所有属性和值,但我完全感到困惑。任何人都可以告诉我如何将ActiveRecord模型类型对象保存为单个记录二进制obejct并检索它并遍历数据集。我需要像Base64这样的编码吗?最后会memcached产生期望的结果?或至少可以遵循的任何链接来解决这个问题?

抱歉这个冗长的问题并提前致谢。

1 个答案:

答案 0 :(得分:0)

答案,我讨厌说,这可能是方法存在缺陷。是否需要更多时间再次查询此确切数据或加载BLOB行并对其进行反序列化?我的猜测是,没有索引需要大致相同的时间,但是使用索引,您甚至可以比没有unserialize调用的情况下加载BLOB更快地从DB获取整个结果集。

现在也许我错了,但肯定回来的数据大致相同,因此db时间的大部分是完全相同的。

Memcached肯定会在这里证明有用,但只是以与查询缓存(假设您使用MySQL)相同的方式。对于同一事物的重复查询应该通过任一方法激光快速返回,假设任一情况下的高速缓存足够大以适合对象。

但是你是正确的,在会话中存储是一种不好的方式,BLOB可能也只是再次执行查询并让查询缓存返回它。

但只是为了涵盖所有基础,总数据集的大小与返回的数量有多大以及您查看查询需要多长时间?我猜这篇文章真的是关于性能但是被实现细节蒙上阴影。