Обработка большого набора объектов ActiveRecord в виде двоичных данных

У меня проблема с манипулированием большим количеством объектов записи модели типа ActiveRecord (записи извлекаются из сложной операции, но из одной и той же таблицы), и я хочу передать этот набор объектов между действиями контроллера. Итак, у меня есть несколько решений, но я не знаю, какой путь выбрать. Более простое, но уродливое решение - сохранить его в сеансах. Но, как я знаю, сохранение большого набора объектов в сеансах явно снижает производительность приложения из-за частого процесса сериализации и десериализации (я думаю, сериализация занимает много времени из-за веб-сервисов - SOAP и двоичного форматирования). Второй вариант, который кажется многообещающим, — это сохранить все эти объекты модели ActiveRecord в виде блога в базе данных, и с помощью одного запроса мы можем получить все и выполнить необходимые операции с этим набором данных. Но я не знаю, как перебирать все объекты после извлечения их из базы данных, потому что они все еще в формате двоичных объектов. Вызов метода проверки показывает все атрибуты и значения, но я совершенно озадачен. Может ли кто-нибудь сказать мне, как сохранить объекты типа модели ActiveRecord в виде двоичного объекта с одной записью, извлечь его и просмотреть набор данных. Нужна ли мне кодировка как Base64?. Наконец, принесет ли memcached желаемый результат?? или, по крайней мере, какие-либо ссылки, по которым можно решить эту проблему?

И извините за длинный вопрос и заранее спасибо.


person nash    schedule 20.11.2009    source источник
comment
Вы думали об использовании Ajax? Я не знаю, смогу ли я углубиться, не зная, почему вам нужно сохранить каплю   -  person Elizabeth Buckwalter    schedule 24.12.2009


Ответы (1)


Ответ, и я ненавижу это говорить, заключается в том, что, вероятно, этот метод ошибочен. Потребуется ли больше времени для повторного запроса этих точных данных или для загрузки строки BLOB и ее десериализации? Я предполагаю, что без индексов требуется примерно столько же времени, но с индексами вы сможете получить весь набор результатов из БД быстрее, чем даже загрузите BLOB даже без вызова unserialize.

Теперь, возможно, я ошибаюсь в этом, но, безусловно, объем возвращаемых данных примерно одинаков, поэтому большая часть времени БД точно такая же.

Memcached, безусловно, окажется полезным здесь, но только так же, как будет полезен кеш запросов (при условии, что вы используете MySQL). Повторные запросы для одного и того же объекта должны быть возвращены как лазер быстро любым методом, предполагая, что кеш в любом случае достаточно велик, чтобы поместиться в объект.

Но вы правы в том, что сохранение в сеансе - это плохой способ, и BLOB, вероятно, также в лучшем случае примерно такой же, как простое повторение запроса и предоставление кешу запросов вернуть его.

Но просто чтобы охватить все основы, насколько велик общий набор данных по сравнению с тем, сколько возвращается и сколько времени, по вашему мнению, занимают запросы? Я предполагаю, что этот пост действительно о производительности, но омрачен деталями реализации.

person Chuck Vose    schedule 20.11.2009