Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
В Cache' новичек. Программирую метод (ObjectScript) для чтения/записи в глобал ^SP("Zakaz","Table") 1. Как получить вцикле данные из глобала? 2. Как загнать массив в в глобал? 3. Как редактировать значения в глобале? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2009, 11:37 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
abrikos1. Как получить вцикле данные из глобала? Код: plaintext 1. 2. 3. 4. 5. abrikos2. Как загнать массив в в глобал? Если arr это массив... И структура в глобале нужна такая же... То Код: plaintext abrikos3. Как редактировать значения в глобале? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2009, 11:47 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
abrikos , по большему счету, массивы в глобал "загонять" не нужно. Нужно сразу писать данные в глобальный массив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2009, 11:49 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
с такими вопросами лучше сначала почитать документацию например вот здесь _________________________________ Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2009, 11:51 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
krvsa s uz=$o(@glb@(uz)) Я чтото забыл для чего @ используется. без него разве неполучится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2009, 11:58 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
'@' ссылочный синтаксис для обращения к глобалам можно и без него конечно, но когда в глобале несколько узлов, тогда очень удобно использовать ссылочный синтаксис _________________________________ Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2009, 12:33 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
DAiMor'@' ссылочный синтаксис для обращения к глобалам Это только частный случай... Это называется "Косвенные выражения". Вычисляется аргумент оператора и подставляется в "командную строку"... Ahillesдля чего @ используется. Для удобства и унификации программного кода, например... Ahillesбез него разве неполучится? Конечно получится. Нужно будет напрямую везде (!) указывать имя глобальной переменной. А так в одном месте указал и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2009, 12:43 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
krvsaКонечно получится. Нужно будет напрямую везде (!) указывать имя глобальной переменной. А так в одном месте указал и все.Макросы для таких вещей существуют, чтобы во время компиляции подставлять, а не во время исполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2009, 14:34 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Dmitry V. Liseev , про какие "макросы" ты говоришь? Код: plaintext никогда не будет "во время компиляции подставлять"... Оно будет вычисляться именно "во время исполнения"/ Другое дело Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2009, 18:50 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Так вот макросы "хороши" когда точно известно что нужно подставить при компиляции. Тут же вопрос глубже... Бывает что само имя не известно на момент компиляции. Оно именно вычисляется в нужный момент исполнения. ---------- Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2009, 18:52 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Теперь вопрос сюда :)) Построчное чтение из глобала. Как считывать строки из глобала (с определенными данными, н-р: ^Book(ID, ID.Avtor), не знаю как точно пишется) из присваивать их опред. переменным. Глобал в несколько узлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 16:30 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Ostika , у глобала нет строк... У него есть имя, узлы и значения... Код: plaintext 1,2,3,"Test" - узлы "Value" - значение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 17:58 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
krvsa Ostika , у глобала нет строк... У него есть имя, узлы и значения... Ясно. Тогда мне надо сформировать строки из определенных значений. В глобале есть узел (пусть будет ID) и его подузел. Надо по знач. ID и из второго узла записать в переменную "ID, Avtor, Nazvanie" Т.е. вытащить не все данные, а только определенные. И засунуть в переменную. Как можно это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 18:07 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Или в разные переменные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 18:08 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Есть такая вот функция (код, метод....): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 18:39 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
В str действительно что-то есть? Проверьте. Если мне не изменяет память, имя файла задается параметром Name, а не при создании объекта. Меня смущает флаг открытия файла K, попрбуйте просто NWS. Возможно один из ваших процессов заблокировал файл (может вы забыли его закрыть или программа вылетела до закрытия файла), попробуйте изменить имя файла. Функции Open и Write возвращают статусы, проверьте их. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 18:49 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Блок А.Н. , я в этом ничего не понимаю.. процессов никаких больше нет (если я правильно поняла), так что, что именно проверять и как? Можете объяснить подробнее? Пожалуйста 8) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 18:53 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
А, как всегда не читаю вопрос перед тем как отвечать. А значение вы таким способом и не получите. $Order дает значение следующего ключа. Чтобы записать просто значение глобала, нужно просто взять ^Book(13,"Author") Типа Do file.WriteLine(^Book(13,"Author")) А если вам нужна именно полная ссылка, то попробуйте команды $query(^Book(13) Она подобна $Order, но возвращает не значение ключа, а текст глобальной ссылки целиком, и она работает на разных уровнях, а $Order только на одном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 18:53 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Чтобы посмотреть статус возврата, нужно вместо Do file.Open("WNKS") делать s sc=file.Open("WNKS") w !,sc Обычно хороший статус равен единице, а плохой там хитро написан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 18:56 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
OstikaТогда мне надо сформировать строки из определенных значений. В глобале есть узел (пусть будет ID) и его подузел. Надо по знач. ID и из второго узла записать в переменную "ID, Avtor, Nazvanie" Т.е. вытащить не все данные, а только определенные. И засунуть в переменную. Как можно это сделать? Если я правильно понял про узлы... Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 20:07 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
krvsaOstikaТогда мне надо сформировать строки из определенных значений. В глобале есть узел (пусть будет ID) и его подузел. Надо по знач. ID и из второго узла записать в переменную "ID, Avtor, Nazvanie" Т.е. вытащить не все данные, а только определенные. И засунуть в переменную. Как можно это сделать? Если я правильно понял про узлы... Код: plaintext 1. 2. 3. Ну вы блин даете... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 21:21 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
MX-9 , в каком смысле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2010, 19:29 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
krvsaAhillesбез него разве неполучится? Конечно получится. Нужно будет напрямую везде (!) указывать имя глобальной переменной. А так в одном месте указал и все. Действительно. А что скорость просядет раза в 3 и читабельность кода стремится к 0, так это фигня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 02:54 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Сергей, не вводите человека в заблуждение. Чтение блока данных занимает время порядка .003 выполнение той же команды разрешения косвенности занимает порядка 0.00003, т.е. разница два порядка. И нужно в первую очередь оптимизировать с точки зрения чтения блоков данных, а только потом с точки зрения выполнения вычислительных операций. Так что если одна операция может и будет выполняться в 10 раз дольше, но конечное время будет таким же (в пределах погрешности). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 05:38 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Блок А.Н. , да пусть везде пишет полное имя глобала. Может через несколько лет работы устанет и таки поймёт... P.S. Про "читабельность", точнее про её стремление к 0, вообще добил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 08:44 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
С точки зрения читаемости @global@ мне тоже не нравилось. Но пару раз ошибся с именем глобала - и решил, что в иногда @ все-таки имеет смысл, особенно при "глубоких" ссылках или когда их нужно исправлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 09:58 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
У нас в МСМовских задачках количество узлов бывало в районе 10шт... Какая там читабельность будет если одно только имя глобала с узлами будет на весь экран? И самое интересно начиналось через несколько лет, когда требавалось "слегка" поменять структуру хранения в тех глобалах. Косвенность же решает все эти проблемы. А вот использовать её или нет... Пожалуй таки решать каждому самостоятельно или коллегиально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 11:59 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Спасибо за подсказку, завтра все опробую.. :) krvsa, можно не много личный вопрос? Где вы работаете? А то мне кажется я уже где то встречала вашу фамилию, а где не вспомню :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 20:01 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
OstikaГде вы работаете? Советская 69А, ООО "НПЦ Аир"... OstikaА то мне кажется я уже где то встречала вашу фамилию, а где не вспомню :( Ты смотри! Становлюсь известным... А ты значит земляк? Кто это у нас еще кашеварить решил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 20:56 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.Сергей, не вводите человека в заблуждение. Чтение блока данных занимает время порядка .003 выполнение той же команды разрешения косвенности занимает порядка 0.00003, т.е. разница два порядка. И нужно в первую очередь оптимизировать с точки зрения чтения блоков данных, а только потом с точки зрения выполнения вычислительных операций. Так что если одна операция может и будет выполняться в 10 раз дольше, но конечное время будет таким же (в пределах погрешности). Ну-ну. Давайте Вы не будете пудрить людям мозги, если уж не понимаете механизма отработки команд. А на будущее поясню, что для выполнения Xecute и косвенности тупо подгружается интерпретирующий модуль. Со всеми вытекающими "вкусностями" оной подгрузки, выгрузки и выполнения. Это что касается "выполнения вычислительных операций". Что же касается данных, насколько я обратил внимание, никто здесь давно уже не заморачивается "неполными глобальными ссылками". Следовательно, глобальное обращение, мало того, что будет разворачиваться из косвенности, так еще и пойдет читаться по полной схеме. Мне пояснить разницу или все же понятно? P.S. Что же касается "0.00003" и прочих цифирь... когда Вы будете обрабатывать данные миллионами строк, Вы поймете, что значит "оптимизация вычислительных операций". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2010, 07:09 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
krvsa Блок А.Н. , да пусть везде пишет полное имя глобала. Может через несколько лет работы устанет и таки поймёт... P.S. Про "читабельность", точнее про её стремление к 0, вообще добил. Ну, ежели за 24 года еще не понял, то видимо и не пойму. А Вы не стесняйтесь, мне очень приятно смотреть на Ваше творчество. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2010, 07:13 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
krvsa А ты значит земляк? Кто это у нас еще кашеварить решил? Землячка Тем более всегда приятно встретить человека из своего же города, где нибудь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2010, 07:32 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2010, 08:19 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Вар. 1: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Вар.2: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Возможно запись в файл идет не правильно, но не знаю как по др. сделать, надо чтобы записывалось все в строку. При этом переменных для записи может быть и больше. Но мне бы хотя бы с двумя сделать :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 09:46 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
OstikaНо если добавлять еще одну переменную, то результат пропадает Не совсем понятно, что означает "результат пропадает"... Файл пуст? Или что? Ostikaнадо чтобы записывалось все в строку. При этом переменных для записи может быть и больше. На выбор... Вар. 1: Код: plaintext 1. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 10:27 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
krvsaНе совсем понятно, что означает "результат пропадает"... Файл пуст? Или что? да, файл пустой... Спс. за варианты, попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 06:28 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Ostikaфайл пустой... В этом варианте Код: plaintext И в этом варианте Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 10:59 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
krvsaИ в этом варианте Код: plaintext 1. Уже нет :) Но там оно записывает в две строки, а надо в одну ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 13:52 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
krvsa Код: plaintext 1. а как можно пробел между ними вставить?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 13:54 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Еще вопрос :) Есть глобал Book. И первый узел ID (номерной). Надо начиная с первого номера узла (не с 1, там может стоять др.) перебрать все остальные, при этом каждый раз записывая в файл. Я так поняла нужен цикл. Но как выводить знач. узлов по порядку, а не задавая опред. значение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 14:06 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Ostikakrvsa Код: plaintext 1. а как можно пробел между ними вставить?? уже разобралась :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 14:08 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Когда задаю файл: Код: plaintext 1. 2. 3. 4. Тело цикла должно быть таким: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. И сам цикл тоже не могу правильно задать :( Помогите, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 14:57 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
вот тут основные функции, Ваш случай $Order ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 14:59 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
2acidвот тут основные функции, Ваш случай $Order Спасибо, я там уже смотрела. И если честно, то с моим плохим английским не оч. поняла. Цикл сделала. Осталось только, как правильно определить начальное значение и конечное. Какое условие должно стоять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 15:06 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Ostika Осталось только, как правильно определить начальное значение и конечное. Какое условие должно стоять. начало Код: plaintext 1. 2. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 15:31 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
2acid , спасибо, сделала :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 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 Что здесь не так??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 15:47 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, все исправили, все работает :) Хотя скоро появятся новые вопросы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 17:09 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Ostika Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Открывать файл на каждой итерации цикла не стоит, это существенно тормозит процесс: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 17:22 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Turk спасибо, и правда быстрее :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 17:25 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
авторXecute и косвенности тупо подгружается интерпретирующий модуль. Со всеми вытекающими "вкусностями" оной подгрузки, выгрузки и выполнения. P.S. Что же касается "0.00003" и прочих цифирь... когда Вы будете обрабатывать данные миллионами строк, Вы поймете, что значит "оптимизация вычислительных операций". Ну вы напугали ежа голым задом :-) У нас как раз эти ваши миллионы строк, и я как раз очень серьезное количество времени потратил на анализ быстродействия и оптимизацию программ. И вот что я вам скажу: - не нужно оптимизировать заранее. Как правило узкое место не там, где изначально кажется. Нужно запускать профилировщик и смотреть, что то место, которое вы так старательно оптимизировали, и без оптимизации работало неплохо. - все упирается в деньги, как быстродействия, так и время разработки. Грубо, с ростом количества данных требуется замена сервера или доработка программы. И если замена сервера будет стоить миллион рублей, а доработка программы сто тысяч, то это имеет огромный смысл. Но если вы эти потратите эти деньги на оптимизацию программы, которая без оптимизации работает один час в месяц, то это все вряд ли оправдано (но бывает по разному). - я встречал много попыток оптимизации по принципу "вот мы обрабатываем миллион строк медленно, а вот теперь чуточку быстрее". В большинстве случаем нужно сводить задачу к "нельзя ли улучшить алгоритм, чтобы не обрабатывать миллион строк?" - и это дает гораздо больший эффект. - в тех задачах, где я разбирался (обработать миллионы строк), большая часть времени идет на доступ к данным, а не на их обработку. И именно доступ и выборку данных имеет большой смысл оптимизировать. Ваш подход имеет смысл только в одном случае - когда нужно сделать десятки миллионов операций с небольшим набором данных. В этом случае да, нужно думать о оптимизации элементарных операций. Но что-то мне кажется, что такая задача не является типичной для СУБД, и я бы даже подумал, чтобы такие задачи решать не в байткоде, как в каше, а, например, в C++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2010, 15:04 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
С другой стороны, я понимаю ваше беспокойство, и в чем-то даже согласен - сейчас об оптимизации думают слишком поздно, и иногда бывает уже слишком тяжело что-то улучшать. Мне на самом деле интересны ваши сообщения, так как, по-моему, на уровне операций и оптимизации операций вы действительно знаете больше меня. И если у вас есть какие-то исследования на эту тему, мне было бы интересно их прочитать. Но с чем я не согласен, так это вашим подходом - "оптимизация во всем", причем похоже это что-то из разряда внутреннего культа, а не целесообразности. Да, я понимаю, что операция косвенности немножко медленнее, чем прямое обращение, но в подавляющем большинстве случаем этим можно пренебречь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2010, 15:16 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Блок А.Н. - в тех задачах, где я разбирался (обработать миллионы строк), большая часть времени идет на доступ к данным, а не на их обработку. И именно доступ и выборку данных имеет большой смысл оптимизировать. Простите, Вы серьезно собираетесь говорить об "оптимизации доступа к данным", пользуясь объектами и псевдо-SQL? Вы хоть раз видели, как выглядит код в .T? Сколько там Xecute, сколько там @ и насколько многоуровневые там вложения? Блок А.Н. Ваш подход имеет смысл только в одном случае - когда нужно сделать десятки миллионов операций с небольшим набором данных. В этом случае да, нужно думать о оптимизации элементарных операций. Но что-то мне кажется, что такая задача не является типичной для СУБД, и я бы даже подумал, чтобы такие задачи решать не в байткоде, как в каше, а, например, в C++. Извините, но Вы не правы. Не думаю, что чтение данных в Вашем случае НАСТОЛЬКО затратно, что Вам уже просто наплевать на последующее быстро/медленно-действие. А насчет C++ и прочих ассемблеров мы уже проходили, замучаетесь гонять данные, быстрее все-равно не получится. P.S. Насчет сравнений... все относительно конечно. Раньше задача работала в среднем 5-10 минут и это было нормально. Сейчас она работает 10-15 секунд и мне говорят "Эээ, Сергей Геннадьевич, что-то тормозит ваша задачка". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 10:01 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.С другой стороны, я понимаю ваше беспокойство, и в чем-то даже согласен - сейчас об оптимизации думают слишком поздно, и иногда бывает уже слишком тяжело что-то улучшать. Нет, сейчас об оптимизации программного продукта не думают вообще. Так принято. Так будет и дальше. Проще оптимизировать технику. Блок А.Н. Мне на самом деле интересны ваши сообщения, так как, по-моему, на уровне операций и оптимизации операций вы действительно знаете больше меня. И если у вас есть какие-то исследования на эту тему, мне было бы интересно их прочитать. Спасибо за доброе слово. Но увы, я простой прикладник, статей не писал никогда. Вот разве что тут иногда взрываюсь, уж простите. Блок А.Н. Но с чем я не согласен, так это вашим подходом - "оптимизация во всем", причем похоже это что-то из разряда внутреннего культа, а не целесообразности. Да, я понимаю, что операция косвенности немножко медленнее, чем прямое обращение, но в подавляющем большинстве случаем этим можно пренебречь. И опять нет. Для меня это просто "правила хорошего тона". И пренебречь ими следует только тогда, когда речь идет об интерактивности. В моменты обработки данных такие пренебрежения недопустимы. Потому как они имеют свойство умножаться. Впрочем, как уже говорилось, это сугубо мое личное мнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 10:09 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
"Вы хоть раз видели, как выглядит код в .T? " Сергей Геннадьевич, пожалуйста, поделитесь знанием или ссылками хотя бы. P.S. Требования к скорости разработки будут только возрастать, а люди являются самой затратной и проблемной частью :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 12:55 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Sergei Obrastsov Простите, Вы серьезно собираетесь говорить об "оптимизации доступа к данным", пользуясь объектами и псевдо-SQL? Вы хоть раз видели, как выглядит код в .T? Сколько там Xecute, сколько там @ и насколько многоуровневые там вложения? ... Не думаю, что чтение данных в Вашем случае НАСТОЛЬКО затратно, что Вам уже просто наплевать на последующее быстро/медленно-действие. [quot Sergei Obrastsov] А насчет C++ и прочих ассемблеров мы уже проходили, замучаетесь гонять данные, быстрее все-равно не получится. От объектов в массовой обработке данных категорически отказались, а SQL вполне используем. Да, я видел int-код, и когда каше еще не умела показывать план запросов, по нему разбирался, что именно происходит (брр). Так вот, несмотря на свою страшность, int-код sql-запроса вполне конкурирует с прямым доступом по скорости, более того, иногда немного быстрее (программист тоже человек). Правда тут надо смотреть внимательно, не все запросы каше делает оптимально, очень плохо делаются вложенные запросы, некоторые агрегатные, типа найти минимум по индексированному полю - тут надо смотреть индивидуально. И да, затратно именно обращение к данным. У нас так как объем данных сотни Гб, а кэш 8 гб сделали совсем недавно, а до этого было 2Гб - данные кэшируются слабо. И разработка на прямом доступе там, где это не требуется - для меня не является хорошим тоном, так как такую программу сложнее понять, в ней легче сделать ошибки, она не учитывает новые индексы и изменившуюся структуру класса, ее сложнее дорабатывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 14:17 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.Так вот, несмотря на свою страшность, int-код sql-запроса вполне конкурирует с прямым доступом по скорости, более того, иногда немного быстрее (программист тоже человек). Это Вы так пошутили. Я понимаю, смешно. Блок А.Н. Правда тут надо смотреть внимательно, не все запросы каше делает оптимально, очень плохо делаются вложенные запросы, некоторые агрегатные, типа найти минимум по индексированному полю - тут надо смотреть индивидуально. Извините, ну никогда стандартизированный движок, тратящий время еще и на осмысливание запроса, не будет быстрее прямого доступа. Это Вы уж загнули. Блок А.Н. И да, затратно именно обращение к данным. У нас так как объем данных сотни Гб, а кэш 8 гб сделали совсем недавно, а до этого было 2Гб - данные кэшируются слабо. Общий объем данных далеко не критерий. Вопрос в операционном объеме. Я слабо себе представляю, для чего может понадобиться такой гигантский кэш. Разве что тысячи пользователей делают гигантские выборки. Блок А.Н. И разработка на прямом доступе там, где это не требуется - для меня не является хорошим тоном, так как такую программу сложнее понять, в ней легче сделать ошибки, она не учитывает новые индексы и изменившуюся структуру класса, ее сложнее дорабатывать. Давайте определимся, мы говорим о скорости работы программы или о скорости ее понимания? Что толку от идеально понятной программы, если она еле ползает? И зачем кому-то ковырять программу, если она и так работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 06:14 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
Стандартный движек даже в динамик sql думает один раз, а потом работает, я так понимаю. Тем более в embed-sql. У нас около полумиллиона договоров пересчитывают пеню, причем пеня пересчитывает за весь период (так как ставка рефинансиования может поменяться задним числом), на каждом договоре могут быть сотни строк в 4х таблицах, причем эти таблицы перевезаны крест-накрест. Всего объем задействованных данных ориентировочно 150-200Гб. Это только один из запускаемых расчетов ночью. Даже 8 Гб кэша это мизер для таких задач. Изменить структуру данных пока не представляется возможным из-за большого количества программ. Непосредственно рядом сидит команда разработчиков, которая делает доработки по требованию заказчика, причем частично меняя старый функционал и частично создавая новый. Обновления делаются каждый день, так что вопрос понимаемости старых программ и возможности их доработки стоит очень остро. Если у вас задачи математического плана - поднять 1 гб данных в 2гб кэш и пересчитать, причем алгоритмы трудоемкие, то у вас будут другие подходы к оптимизации, это понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 06:43 |
|
||
|
Программное чтение / запись в глобал
|
|||
|---|---|---|---|
|
#18+
doublefint"Вы хоть раз видели, как выглядит код в .T? " Сергей Геннадьевич, пожалуйста, поделитесь знанием или ссылками хотя бы. Да пожалуйста, наслаждайтесь. Cinema.Film.T1 из SAMPLES: Код: plaintext 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. Я прошу прощения, не могу вспомнить в каких структурах видел Xecute. Буду ковырять дальше. doublefint P.S. Требования к скорости разработки будут только возрастать, а люди являются самой затратной и проблемной частью :( Судя по тому, что я наблюдаю, скорость разработки как раз падает. А что люди? Когда они видят, что на всех уровнях к качеству ПО относятся все хуже, они начинают делать соответствующие выводы. Отсюда мы имеем то, что есть: разработка идет медленнее, программы работают медленнее, объемы хранимых данных бессмысленно растут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 07:19 |
|
||
|
|

start [/forum/topic.php?all=1&fid=39&tid=1557957]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 260ms |
| total: | 403ms |

| 0 / 0 |
