powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Программное чтение / запись в глобал
25 сообщений из 58, страница 2 из 3
Программное чтение / запись в глобал
    #36842886
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С точки зрения читаемости @global@ мне тоже не нравилось.
Но пару раз ошибся с именем глобала - и решил, что в иногда @ все-таки имеет смысл, особенно при "глубоких" ссылках или когда их нужно исправлять.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36843215
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас в МСМовских задачках количество узлов бывало в районе 10шт... Какая там читабельность будет если одно только имя глобала с узлами будет на весь экран?

И самое интересно начиналось через несколько лет, когда требавалось "слегка" поменять структуру хранения в тех глобалах.

Косвенность же решает все эти проблемы.

А вот использовать её или нет... Пожалуй таки решать каждому самостоятельно или коллегиально.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36844326
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за подсказку, завтра все опробую.. :)

krvsa, можно не много личный вопрос? Где вы работаете? А то мне кажется я уже где то встречала вашу фамилию, а где не вспомню :(
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36844365
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OstikaГде вы работаете?
Советская 69А, ООО "НПЦ Аир"...

OstikaА то мне кажется я уже где то встречала вашу фамилию, а где не вспомню :(
Ты смотри! Становлюсь известным...

А ты значит земляк? Кто это у нас еще кашеварить решил?
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36844624
Sergei Obrastsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Сергей, не вводите человека в заблуждение.

Чтение блока данных занимает время порядка .003
выполнение той же команды разрешения косвенности занимает порядка 0.00003, т.е. разница два порядка. И нужно в первую очередь оптимизировать с точки зрения чтения блоков данных, а только потом с точки зрения выполнения вычислительных операций.

Так что если одна операция может и будет выполняться в 10 раз дольше, но конечное время будет таким же (в пределах погрешности).
Ну-ну. Давайте Вы не будете пудрить людям мозги, если уж не понимаете
механизма отработки команд. А на будущее поясню, что для выполнения
Xecute и косвенности тупо подгружается интерпретирующий модуль. Со
всеми вытекающими "вкусностями" оной подгрузки, выгрузки и выполнения.
Это что касается "выполнения вычислительных операций". Что же касается данных,
насколько я обратил внимание, никто здесь давно уже не заморачивается "неполными
глобальными ссылками". Следовательно, глобальное обращение, мало того, что
будет разворачиваться из косвенности, так еще и пойдет читаться по полной
схеме. Мне пояснить разницу или все же понятно?

P.S. Что же касается "0.00003" и прочих цифирь... когда Вы будете обрабатывать
данные миллионами строк, Вы поймете, что значит "оптимизация вычислительных операций".
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36844627
Sergei Obrastsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa Блок А.Н. , да пусть везде пишет полное имя глобала. Может через несколько лет работы устанет и таки поймёт...

P.S. Про "читабельность", точнее про её стремление к 0, вообще добил.
Ну, ежели за 24 года еще не понял, то видимо и не пойму. А Вы не стесняйтесь,
мне очень приятно смотреть на Ваше творчество.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36844636
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa
А ты значит земляк? Кто это у нас еще кашеварить решил?

Землячка Тем более всегда приятно встретить человека из своего же города, где нибудь
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36844669
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OstikaЗемлячка
Ну тада ваще!
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36849399
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ClassMethod WrFileGl() As %String
{
	Set str=$G(^Book( 13 ,"Author"))
	Set file=##class(%File).%New("c:\box\fileGl.txt")
	w file
	Do file.Open("NWS")
	Do file.WriteLine(str)
	Do file.Close()
	q  1 
}
Работает прекрасно, все записывает и т.п. Но если добавлять еще одну переменную, то результат пропадает Или я что-то не то делаю?

Вар. 1:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ClassMethod WrFileGl() As %String
{
	Set str1=$G(^Book( 13 ,"Author"))
	Set str2=$G(^Book( 13 ,"Cont_Name"))
	Set file=##class(%File).%New("c:\box\fileGl.txt")
	w file
	Do file.Open("NWS")
	Do file.WriteLine(str1, str2)
	Do file.Close()
	q  1 
}

Вар.2:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ClassMethod WrFileGl() As %String
{
	Set str1=$G(^Book( 13 ,"Author"))
	Set str2=$G(^Book( 13 ,"Cont_Name"))
	Set file=##class(%File).%New("c:\box\fileGl.txt")
	w file
	Do file.Open("NWS")
	Do file.WriteLine(str1)
	Do file.WriteLine(str2)
	Do file.Close()
	q  1 
}

Возможно запись в файл идет не правильно, но не знаю как по др. сделать, надо чтобы записывалось все в строку. При этом переменных для записи может быть и больше. Но мне бы хотя бы с двумя сделать :))
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36849489
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OstikaНо если добавлять еще одну переменную, то результат пропадает
Не совсем понятно, что означает "результат пропадает"... Файл пуст? Или что?

Ostikaнадо чтобы записывалось все в строку. При этом переменных для записи может быть и больше.
На выбор...
Вар. 1:
Код: plaintext
1.
	Do file.WriteLine(str1_str2)
Вар.2:
Код: plaintext
1.
2.
	Do file.Write(str1)
	Do file.Write(str2)
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36851532
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsaНе совсем понятно, что означает "результат пропадает"... Файл пуст? Или что?
да, файл пустой...

Спс. за варианты, попробую.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36851785
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ostikaфайл пустой...
В этом варианте

Код: plaintext
Do file.WriteLine(str1, str2)
понятно почему. У этого метода нет второго параметра - должна быть ошибка.

И в этом варианте

Код: plaintext
1.
Do file.WriteLine(str1)
Do file.WriteLine(str2)
файл пуст?
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36852185
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsaИ в этом варианте
Код: plaintext
1.
Do file.WriteLine(str1)
Do file.WriteLine(str2)
файл пуст?

Уже нет :) Но там оно записывает в две строки, а надо в одну
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36852192
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa
Код: plaintext
1.
	Do file.WriteLine(str1_str2)


а как можно пробел между ними вставить??
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36852214
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вопрос :)
Есть глобал Book. И первый узел ID (номерной). Надо начиная с первого номера узла (не с 1, там может стоять др.) перебрать все остальные, при этом каждый раз записывая в файл. Я так поняла нужен цикл. Но как выводить знач. узлов по порядку, а не задавая опред. значение?
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36852224
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ostikakrvsa
Код: plaintext
1.
	Do file.WriteLine(str1_str2)


а как можно пробел между ними вставить??

уже разобралась :)
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36852367
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
ClassMethod WrFileGl() As %String
{
	Set nId= 1 
	Set nId=$O(^Book(nId))
	Set str1=$G(^Book(nId,"Author"))
	Set str2=$G(^Book(nId,"Name"))
	Set file=##class(%File).%New("c:\box\fileGl.txt")
	w file
	Do file.Open("NWS")
	Do file.WriteLine(nId_" "_str1_" "_"<"_str2_">")
	Do file.Close()
	q  1 
}
Вот что получилось.. все работает и записывает. Теперь проблема добавления цикла.
Когда задаю файл:
Код: plaintext
1.
2.
3.
4.
Set file=##class(%File).%New("c:\box\fileGl.txt")
	w file
	Do file.Open("NWS")
	Do file.Close()
до цикла, возникает ошибка.
Тело цикла должно быть таким:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ClassMethod WrFileGl() As %String
{
	Set str1=$G(^Book(nId,"Author"))
	Set str2=$G(^Book(nId,"Name"))
	Set file=##class(%File).%New("c:\box\fileGl.txt")
	w file
	Do file.Open("AWS")
	Do file.WriteLine(nId_" "_str1_" "_"<"_str2_">")
	Do file.Close()
	q  1 
}
Нужно, чтобы создавался новый файл, а в цикле дописывался.
И сам цикл тоже не могу правильно задать :( Помогите, пожалуйста.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36852374
2acid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот тут основные функции, Ваш случай $Order
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36852404
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2acidвот тут основные функции, Ваш случай $Order
Спасибо, я там уже смотрела. И если честно, то с моим плохим английским не оч. поняла.

Цикл сделала. Осталось только, как правильно определить начальное значение и конечное. Какое условие должно стоять.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36852462
2acid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ostika
Осталось только, как правильно определить начальное значение и конечное. Какое условие должно стоять.

начало
Код: plaintext
1.
2.
SET s=$ORDER(^client(""))
WRITE s
конец
Код: plaintext
1.
2.
SET s=$ORDER(^client(""),- 1 )
WRITE s
В документации на $Order, раздел "Start and End for a Search"
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36852497
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2acid , спасибо, сделала :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ClassMethod WrFileGlC() As %String
{
	Set file=##class(%File).%New("c:\box\fileGl1.txt")
	w file
	Do file.Open("N")
	Do file.Close()
	Set nId=$ORDER(^Book(""))
	Set nEnd=$ORDER(^Book(""),- 1 )
	do {
	Set str1=$G(^Book(nId,"Author"))
	Set str2=$G(^Book(nId,"Name"))
	Do file.Open("AWS")
	Do file.WriteLine(nId_" "_str1_" "_"<"_str2_">")
	Do file.Close()
	Set nId=$O(^Book(nId))
	} while nId<=nEnd
	q  1 
}
Первый раз сработал, на второй и т.д. вылезла ошибка на терминале:

W ##CLASS(Test.dop).WrFileGlC()
^
<CLASS EDITED>^Test.dop.1
LIBRARY 2e1>w ##class(Test.dop).WrFileGlC()

W ##CLASS(Test.dop).WrFileGlC()
^
<CLASS EDITED>^Test.dop.1

Что здесь не так???
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36852759
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, все исправили, все работает :) Хотя скоро появятся новые вопросы
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36852803
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ostika
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ClassMethod WrFileGlC() As %String
{
	Set file=##class(%File).%New("c:\box\fileGl1.txt")
	w file
	Do file.Open("N")
	Do file.Close()
	Set nId=$ORDER(^Book(""))
	Set nEnd=$ORDER(^Book(""),- 1 )
	do {
	Set str1=$G(^Book(nId,"Author"))
	Set str2=$G(^Book(nId,"Name"))
	Do file.Open("AWS")
	Do file.WriteLine(nId_" "_str1_" "_"<"_str2_">")
	Do file.Close()
	Set nId=$O(^Book(nId))
	} while nId<=nEnd
	q  1 
}

Открывать файл на каждой итерации цикла не стоит, это существенно тормозит процесс:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
ClassMethod WrFileGlC() As %String
{
	Set file=##class(%File).%New("c:\box\fileGl1.txt")
	w file
	Do file.Open("NWS")
	Set nId=""
	f {
		Set nId=$ORDER(^Book(nId))
		Quit:(nId="")
		Set str1=$G(^Book(nId,"Author"))
		Set str2=$G(^Book(nId,"Name"))
		Do file.WriteLine(nId_" "_str1_" "_"<"_str2_">")
	}
	Do file.Close()
	Kill file
	q  1 
}
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36852818
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Turk спасибо, и правда быстрее :)
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36853627
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторXecute и косвенности тупо подгружается интерпретирующий модуль. Со
всеми вытекающими "вкусностями" оной подгрузки, выгрузки и выполнения.

P.S. Что же касается "0.00003" и прочих цифирь... когда Вы будете обрабатывать
данные миллионами строк, Вы поймете, что значит "оптимизация вычислительных операций".

Ну вы напугали ежа голым задом :-)
У нас как раз эти ваши миллионы строк, и я как раз очень серьезное количество времени потратил на анализ быстродействия и оптимизацию программ. И вот что я вам скажу:
- не нужно оптимизировать заранее. Как правило узкое место не там, где изначально кажется. Нужно запускать профилировщик и смотреть, что то место, которое вы так старательно оптимизировали, и без оптимизации работало неплохо.
- все упирается в деньги, как быстродействия, так и время разработки. Грубо, с ростом количества данных требуется замена сервера или доработка программы. И если замена сервера будет стоить миллион рублей, а доработка программы сто тысяч, то это имеет огромный смысл. Но если вы эти потратите эти деньги на оптимизацию программы, которая без оптимизации работает один час в месяц, то это все вряд ли оправдано (но бывает по разному).
- я встречал много попыток оптимизации по принципу "вот мы обрабатываем миллион строк медленно, а вот теперь чуточку быстрее". В большинстве случаем нужно сводить задачу к "нельзя ли улучшить алгоритм, чтобы не обрабатывать миллион строк?" - и это дает гораздо больший эффект.
- в тех задачах, где я разбирался (обработать миллионы строк), большая часть времени идет на доступ к данным, а не на их обработку. И именно доступ и выборку данных имеет большой смысл оптимизировать.

Ваш подход имеет смысл только в одном случае - когда нужно сделать десятки миллионов операций с небольшим набором данных. В этом случае да, нужно думать о оптимизации элементарных операций. Но что-то мне кажется, что такая задача не является типичной для СУБД, и я бы даже подумал, чтобы такие задачи решать не в байткоде, как в каше, а, например, в C++.
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 2 из 3
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Программное чтение / запись в глобал
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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