Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Работаем с Cache/GT.M из php / 25 сообщений из 26, страница 1 из 2
21.02.2012, 12:24
    #37672054
kalin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
Прямой доступ из 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
21.02.2012, 15:54
    #37672698
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
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
21.02.2012, 16:44
    #37672865
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
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
21.02.2012, 16:53
    #37672886
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
Код: 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
21.02.2012, 17:02
    #37672920
kalin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
Здесь только пример как напрямую работать с глобалами. Ясно, что быстрее выбрать массив из базы одним запросом и вернуть в php. Данный шлюз позволяет все это сделать, например вызвать метод класса или программу. Все это есть в доке.
Т.к. называемый M/Wire работает через xinetd и является протоколом другого уровня и архитектуры.
...
Рейтинг: 0 / 0
21.02.2012, 17:17
    #37672952
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
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
21.02.2012, 17:23
    #37672975
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
Примерно так пробовали в работе родной сокет:

Код: 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
21.02.2012, 19:37
    #37673269
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
ValeriuС использованием Cache(MSM)-сервера, это происходит гораздо быстрее !
Потому-что нет посредников.

Мне кажется вы не совсем понимаете общий механизм работы.
...
Рейтинг: 0 / 0
21.02.2012, 21:04
    #37673398
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
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
21.02.2012, 21:43
    #37673442
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
2 kalin
Пожалуйста приведите результаты для Cache и GT.M для нескольких количеств.
Пробовали ли вы CGI , SCGI и если да - опишите пожалуйста результаты.

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

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

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

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
22.02.2012, 10:35
    #37673930
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
Я еще раз хочу подчеркнуть, скорость передачи и приема
данных через сокет происходит с очень большой скорости !
при нечастых открытиях(закрытиях) сокета на стороне Linux(GT.M)
Здесь вопросов даже не должно быть !!!
А вот при многоразовых быстрых открытиях(закрытиях) -тормоза .
Правда, это мы тестили с использованием только Windows-ой
клиентской стороны.
...
Рейтинг: 0 / 0
22.02.2012, 10:48
    #37673962
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
авторОдно ясно, он стандартно не может работать с дочерними процессами:
http://groups.google.com/group/comp.lang.mumps/browse_thread/thread/62da7171bef11e46/bd78530ccc0d9ca4?lnk=gst&q=Socket+child#bd78530ccc0d9ca4
...
Рейтинг: 0 / 0
22.02.2012, 12:24
    #37674152
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
Получается что из сэмплов мульти сервер не конкурентный. С самими сокетами всё нормально, НО они не могут быть переданы дочернему процессу.
...
Рейтинг: 0 / 0
22.02.2012, 13:21
    #37674277
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
Еще одно внедрение было для сокетов(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
22.02.2012, 13:55
    #37674349
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
Уже пробовал. Есть конечно улучшение, но не существенные.
...
Рейтинг: 0 / 0
22.02.2012, 14:10
    #37674386
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
В добавок у ТС получается длюнющая цепочка:
apache - php - mod - python - GT.M

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

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

http://eltranssoft.ucoz.ru/news/valeriu_gontia/2011-08-25-18
...
Рейтинг: 0 / 0
22.02.2012, 17:45
    #37674864
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
2 Valeriu
Красиво, была бы у меня windows - обязательно пользовался бы.
...
Рейтинг: 0 / 0
23.02.2012, 17:48
    #37675727
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
4d_monster Красиво, была бы у меня windows - обязательно пользовался бы.
kalin
Не будет в обиду Serenji, но ... у нас летит. Установил на той же машине что наше приложение - ели двигается.
Да у нас и пользователей сколько хочешь.
У них постоянно нужно запускать SHELL ...
У нас один раз и навсегда автоматом при запуске Linuxa ( /etc/xinetd.d/mwire)
Компиляция с ловушками ошибками как у нас один в один.
Я думал что мы чего-то не до учли с сокетом... Нет, я был не прав.
Все делается в сравнение.
Не хотел никого обидеть. Извините если что-то не то.
...
Рейтинг: 0 / 0
23.07.2012, 18:25
    #37889606
Работаем с Cache/GT.M из php
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
24.07.2012, 07:03
    #37889944
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
Антон Аксёнов продолжаете использовать xinetd? Или как-то удалось решить проблему медленного коннекта?
Что если написать простую проксирующую прослойку, которая не будет рвать коннект с GT.M но с сервером будет.

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

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

gontiaval@gmail.com
...
Рейтинг: 0 / 0
24.07.2012, 08:38
    #37889980
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работаем с Cache/GT.M из php
Еще.
Для пробы можно пробовать использовать родной сокет 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
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Работаем с Cache/GT.M из php / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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