powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Работаем с Cache/GT.M из php
26 сообщений из 26, показаны все 2 страниц
Работаем с Cache/GT.M из php
    #37672054
kalin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прямой доступ из php обеспечивает шлюз MGWSI 2.0.95 http://gradvs1.mgateway.com

Пример кода на php
<?php
set_time_limit(180);
$a=time();
echo '<p>Старт записи</p>';
//// k ^Customer
m_kill("^Customer");
/// f i=1:1:1000 s ^Customer(i)="test"
for ($i=1;$i<1000;$i++) m_set("^Customer",$i,"test");
//echo '<p>Конец:'.date("H:i:s").'</p>';
$b=time();
$b=$b-$a;
echo '<p>Затрачено времени:'.$b.' сек.';
$a=time();
echo '<p>Старт чтения</p>';
// s nextID="" f s nextID=$o(^Customer(nextID)) q:nextID="" s c=$g(^Customer(nextID))
$nextID=m_order("^Customer","");
while ($nextID!='') {
$c=m_get("^Customer",$nextID);
//echo '<p>'.$nextID.'='.$c.'</p>';
$nextID=m_order("^Customer",$nextID);
}
$b=time();
$b=$b-$a;
echo '<p>Затрачено времени:'.$b.' сек.';

Примерное время записи-чтения на 100 записей составляет 1 сек.
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37672698
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 логично вынести k ^Customer за начало отсчёта или говорить и о удалении ( хотя разницы я не намерил)
2 странно в режиме CGI на 1 000 000 записей и чтения у меня уходит 5 сек:

авторstart62508,53499 writed62508,53503 readed62508,53504

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
monster@mupyx:~/.fis-gtm/V5.4-002B_x86_64/r$ cat mhello.m 
mhello  ; mumps hello place
 write "Content-Type: text/html",!
 write "",!
 write "<html><body>Hello! World! from MUMPS !!!<br>",!
 write "run number:"
 write $INCREMENT(^test(0))
 write "<br>",!
 Write "<p>Recived Headers/ENV vars" 
 Write "<table>" 
 Write " <tr>" 
 Write "  <th>Name</th><th>Value</th>" 
 Write " </tr>" 
 For var="DOCUMENT_ROOT","GATEWAY_INTERFACE","HTTP_ACCEPT","HTTP_ACCEPT_ENCODING","HTTP_ACCEPT_LANGUAGE","HTTP_CACHE_CONTROL","HTTP_CONNECTION","HTTP_HOST","HTTP_USER_AGENT","IFS","OPTIND","PATH","PPID","PS1","PS2","PS4","PWD","QUERY_STRING","REMOTE_ADDR","REMOTE_PORT","REQUEST_METHOD","REQUEST_URI","SCRIPT_FILENAME","SCRIPT_NAME","SERVER_ADDR","SERVER_ADMIN","SERVER_NAME","SERVER_PORT","SERVER_PROTOCOL","SERVER_SIGNATURE","SERVER_SOFTWARE" do 
 .Write "<tr><td>",var,"</td><td>",$ZTRNLNM(var),"</td></tr>" 
 Write "</table>" 
 Write "<br/>" 
 Write "</p>" 
 set contentType=$ZTRNLNM("CONTENT_TYPE") 
 set contentLength=+$ZTRNLNM("CONTENT_LENGTH") 
 set data="" ; extract request body from stdin 
 set qstr="" read:contentLength>0 qstr#contentLength:2 
 Write "<h3>Content of request Body</h3>" 
 Write "<textarea>",data,"</textarea>"
 write "</body></html>",!,!
 k ^Customer
 w !,"start"
 s t=$h
 write t,!

 f i=1:1:1000000 s ^Customer(i)="test"
 w !,"writed"
 s t=$h
 write t
 s nextID=""
 f  s nextID=$o(^Customer(nextID)) q:nextID=""  s c=^Customer(nextID)
 
 w !,"readed"
 s t=$h
 write t 
 
 Quit
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37672865
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kalin Прямой доступ
Используем M/Wire на стороне GT.M (xnetd) с собственными
дополнительными модулями к нему.
На стороне клиента Windows XP (Socket)
Получаю примерно 100 000 строк (длина > 500 символов в каждой ! ),
примерно за 1,5 с. за один раз.
Отправить серверу могу за один раз строку размером 1 Mb.(позволяет переменная в GT.M)
Мы работаем только строками с разделителями.
Вся логика М крутится на сервере, клиент пользуется только
обьектом (написана собственная dll) , те его методами и свойствами.
В качестве сервера обычная PC машина.

Замечено. Обращение в цикле со стороны клиента WinXP на GT.M
тормозит очень процесс. Тормозит GT.M-кая сторона.
Все у них отлично до невозможное, но вот сокет ...
Так что лучше работать большими обьемами.
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37672886
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
/// f i=1:1:1000 s ^Customer(i)="test"
for ($i=1;$i<1000;$i++) m_set("^Customer",$i,"test");
//echo '<p>Конец:'.date("H:i:s").'</p>';
$b=time();
$b=$b-$a;
echo '<p>Затрачено времени:'.$b.' сек.';
$a=time();
echo '<p>Старт чтения</p>';
// s nextID="" f s nextID=$o(^Customer(nextID)) q:nextID="" s c=$g(^Customer(nextID))
$nextID=m_order("^Customer","");
while ($nextID!='') {
$c=m_get("^Customer",$nextID);
//echo '<p>'.$nextID.'='.$c.'</p>';
$nextID=m_order("^Customer",$nextID);
}
$b=time();
$b=$b-$a;
echo '<p>Затрачено времени:'.$b.' сек.';


Вот именно здесь слабое место о котором я говорил. Циклы вне GT.M на клиенте.
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37672920
kalin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь только пример как напрямую работать с глобалами. Ясно, что быстрее выбрать массив из базы одним запросом и вернуть в php. Данный шлюз позволяет все это сделать, например вызвать метод класса или программу. Все это есть в доке.
Т.к. называемый M/Wire работает через xinetd и является протоколом другого уровня и архитектуры.
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37672952
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kalin Т.к. называемый M/Wire работает через xinetd и является протоколом другого уровня и архитектуры.
Мы пробовали и с родным сокетом, результат тот же .
Те вместо xinetd вклинили GT.M сокет родной.
Примерно такая конструкция клиентского кода выполняется очень медленно
Код: vbnet
1.
2.
3.
for i=1 to 100
 gtm.Xecute("w $ZV")
next 


С использованием Cache(MSM)-сервера, это происходит гораздо быстрее !
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37672975
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно так пробовали в работе родной сокет:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
listen ; master server
 s timeo=30
 s port=1959
 s tcpdev="|TCP|"_port
 o tcpdev:(ZLISTEN=port_":TCP":NODELIMITER:ATTACH="listener"):timeo:"SOCKET"
 e  q
 u tcpdev
 w /listen(1)
 f  d  q:$key]""
 . w /wait(timeo)
 . i $key]"" q
 s socket=$p($key,"|",2)
 c tcpdev:(SOCKET="listener") j listen^%log u tcpdev:(NODELIMITER:SOCKET=socket)
 d command^%mwire
 q
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37673269
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuС использованием Cache(MSM)-сервера, это происходит гораздо быстрее !
Потому-что нет посредников.

Мне кажется вы не совсем понимаете общий механизм работы.
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37673398
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monster Потому-что нет посредников.

Мне кажется вы не совсем понимаете общий механизм работы.
Я этот вопрос поднимал неоднократно, но ответа вразумительного так и
не получил
http://groups.google.com/group/comp.lang.mumps/browse_thread/thread/4e4e57f74f04132/34d88ea732bd829f?lnk=gst&q=Wire#34d88ea732bd829f

Сокет в GT.M реализован не так как в других реализациях М.
Они сами это признают и сами советуют использовать inetd или xnetd
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37673442
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 kalin
Пожалуйста приведите результаты для Cache и GT.M для нескольких количеств.
Пробовали ли вы CGI , SCGI и если да - опишите пожалуйста результаты.

ValeriuСокет в GT.M реализован не так как в других реализациях М.
Они сами это признают и сами советуют использовать inetd или xnetd
мне как начинающему этот вопрос очень важен, не могли бы вы кинуть ссылки?
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37673501
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По вашему вопросу. Здесь тоже я поднял эту тему .
Там и получил ответ.

http://groups.google.com/group/comp.lang.mumps/browse_thread/thread/8152f0cd09295c7b/8af3896f9fd58219?lnk=gst&q=socket+gt#8af3896f9fd58219
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37673774
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Главная ссылка из группы на документацию.
Там не написано что сокеты не так как в остальных, там написано, что $PRINCIPAL может быть не термиалом а сокетом. Про саму реализацию сокетов я там ничего не нашёл.

А вот пример работы с сокетами прошу вас (если есть возможность) проверить на Каше и GT.M в плане скорости и возможности многопоточной работы. Простую работоспособность мне хватило знаний проверить.
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37673827
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одно ясно, он стандартно не может работать с дочерними процессами:

Because GT.M cannot pass sockets between processes we are using the following strategy:
1. Job off a real serverLink process which will listen on the port
2. Use a lock to monitor when it has completed

1. Open port 5000 in listen mode
2. Job another process which will also attempt to listen on port 5000. It will hang until
this process closes the listen socket.
3. As soon as this process gets a connection, close the listen socket and start to service the
the active connection.
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37673930
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я еще раз хочу подчеркнуть, скорость передачи и приема
данных через сокет происходит с очень большой скорости !
при нечастых открытиях(закрытиях) сокета на стороне Linux(GT.M)
Здесь вопросов даже не должно быть !!!
А вот при многоразовых быстрых открытиях(закрытиях) -тормоза .
Правда, это мы тестили с использованием только Windows-ой
клиентской стороны.
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37673962
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОдно ясно, он стандартно не может работать с дочерними процессами:
http://groups.google.com/group/comp.lang.mumps/browse_thread/thread/62da7171bef11e46/bd78530ccc0d9ca4?lnk=gst&q=Socket+child#bd78530ccc0d9ca4
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37674152
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получается что из сэмплов мульти сервер не конкурентный. С самими сокетами всё нормально, НО они не могут быть переданы дочернему процессу.
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37674277
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одно внедрение было для сокетов(Technical Bulletin - GT.M V5.4-000A Release Notes),
правда мы не пробовали это- MOREREADTIME

http://tinco.pair.com/bhaskar/gtm/doc/articles/GTM_V5_4_000A_Release_Notes.html
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37674349
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже пробовал. Есть конечно улучшение, но не существенные.
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37674386
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В добавок у ТС получается длюнющая цепочка:
apache - php - mod - python - GT.M

Вот если бы он в ПХП результат отправля бы тогда бы гораздо быстрее было.
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37674845
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To 4d_monster

Так например выглядит Ваш код программы в наше приложение
написанной с использованием сокетов и M/Wire:

http://eltranssoft.ucoz.ru/news/valeriu_gontia/2011-08-25-18
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37674864
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Valeriu
Красиво, была бы у меня windows - обязательно пользовался бы.
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37675727
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monster Красиво, была бы у меня windows - обязательно пользовался бы.
kalin
Не будет в обиду Serenji, но ... у нас летит. Установил на той же машине что наше приложение - ели двигается.
Да у нас и пользователей сколько хочешь.
У них постоянно нужно запускать SHELL ...
У нас один раз и навсегда автоматом при запуске Linuxa ( /etc/xinetd.d/mwire)
Компиляция с ловушками ошибками как у нас один в один.
Я думал что мы чего-то не до учли с сокетом... Нет, я был не прав.
Все делается в сравнение.
Не хотел никого обидеть. Извините если что-то не то.
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37889606
Valeriukalin Т.к. называемый M/Wire работает через xinetd и является протоколом другого уровня и архитектуры.
Мы пробовали и с родным сокетом, результат тот же .
Те вместо xinetd вклинили GT.M сокет родной.
Примерно такая конструкция клиентского кода выполняется очень медленно
Код: vbnet
1.
2.
3.
for i=1 to 100
 gtm.Xecute("w $ZV")
next 


С использованием Cache(MSM)-сервера, это происходит гораздо быстрее !


Здравствуйте! Valeriu , если не секрет - сейчас продолжаете использовать xinetd? Или как-то удалось решить проблему медленного коннекта?
Что если написать простую проксирующую прослойку, которая не будет рвать коннект с GT.M но с сервером будет. У меня пока такая мысль.
И еще, можно как-то с вами связаться, не через форум (тут вам ЛС не послать).
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37889944
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Антон Аксёнов продолжаете использовать xinetd? Или как-то удалось решить проблему медленного коннекта?
Что если написать простую проксирующую прослойку, которая не будет рвать коннект с GT.M но с сервером будет.

Да, только этим и пользуемся.
Как бы это обяснить, конект не медленный, но вызывать Xecute в цикле на стороне клиента
нету смысла, за исключением редких случаев, да и то одноразовых.
Все это делает сервер и отправляет клиенту большие порции данных, а это уже
происходит очень и очень быстро.
За один раз клиент может отправлять серверу в виде запросов, разных данных, итд 1 Мб информации
В свою очередь сервер уже может отправлять клиенту большие порции данных,
конечно в пределах разумного. :)

Можете писать на :

gontiaval@gmail.com
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37889980
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще.
Для пробы можно пробовать использовать родной сокет GT.M
Т.е вместо xnetd и сравнивать результат.


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
listen ; master server
 s timeo=30
 s port=1959
 s tcpdev="|TCP|"_port
 o tcpdev:(ZLISTEN=port_":TCP":NODELIMITER:ATTACH="listener"):timeo:"SOCKET"
 e  q
 u tcpdev
 w /listen(1)
 f  d  q:$key]""
 . w /wait(timeo)
 . i $key]"" q
 s socket=$p($key,"|",2)
 c tcpdev:(SOCKET="listener") j listen^%log u tcpdev:(NODELIMITER:SOCKET=socket)
 d command^%mwire
 q
...
Рейтинг: 0 / 0
Работаем с Cache/GT.M из php
    #37890006
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу извинить за повтор. Не заметил что выше было уже...
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Работаем с Cache/GT.M из php
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]