LINUX.ORG.RU

Подскажите вариант, как сделать модуль в котором будут данные для остальных модулей.


0

0

Разработка ведется на перле под мод_перл. Задача - модуль считывает данные из базы и потом все модули запущенные в мод_перд могут обращаться к этому модулю что получения данных. Вопрос в том - можно ли использовать как-то мод_перл для пркомпиляции и создния объекта этого модуля в памяти. Без мод_перл вижу решения - написать демон и модуль как интерфейс к нему, который будет получать от него данные через сокеты или еще как-то; использовать мемкеш или что-то похожее. Но интерестно можно ли создать объект средствами испоьзуя возмозности мод_перл, иниализровать его и потом обращаться к этому объекту для получения данных.

anonymous

Нет.

У тебя в памяти в общем случае несколько экземпляров перла висит и у каждого свои модули.

Смотри вариант с демоном как наиболее удачный.

Кстати, какие то готовые когда то видел.

Там типа кеша, ему говориш $cache->put($key, $someData) / $data = $cache->get($key) и все.

roller ★★★
()

Если данные не меняются "никогда" (т.е. достаточно редко, чтобы при их изменении можно было перепустить апача) - то можно считывать все в BEGIN-блоке, компиляция в мод-перле выполняется до расфоркивания рабочих процессов.

Если меняются - то смотреть на какие-нибудь решения типа memcached или другой системы с shared memory.

Демон-и-сокеты - будет очень медленно, если там какие-то словари и т.п.

А вообще - если тебе нужны все время одни и те же данные из базы, причем небольшого объема - то ты можешь назаготовить себе запросов (в смысле, $sth_get_this = $dbh->prepare("select this from there where id=?"), и потом выполнять запросы - это будет вполне себе быстро (SQL парсится один раз при prepare, данные будут постоянно в кеше).

anonymous
()
Ответ на: комментарий от anonymous

>то ты можешь назаготовить себе запросов
Это я понимаю, можно реализовать еде проще с помощью мемкеша и спопса.
>Если данные не меняются "никогда" (т.е. достаточно редко
Так и есть.
>то можно считывать все в BEGIN-блоке,
Можно подрбнее об этом, бегин блок в перле? И как это реализовать, что-бы было расшарено для всех модулей которые будут запускаться?

stalcker
()
Ответ на: комментарий от stalcker

package MyApp::GlobalData;

use Exporter;
use base qw/Exporter/;
our @EXPORT_OK=qw/$val1 $val2/;

our ($val1, $val2);

BEGIN {
  my $dbh = DBI->connect("blablah");
  ($val1) = $dbh->selectrow_array("select val1 from somewhere");
  ($val2) = $dbh->selectrow_array("select val2 from somewhere_else");
}

1;

потом в нужным местах говоришь, что

use MyApp::GlobalData qw/$var1/;

В общем, как-то так.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.