Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei Obrastsov[quot Stpl] HyperIndex - вещь конечно хорошая, но не стоит забывать об объемах. Особенно на больших массивах данных и уж тем более при bit-slicing. Ну вот такой пример: при 200,000,000 записей в БД получаем 3125 chunks по 64,000 бит на одно значение. Я не уверен, что это разумный подход. Не очень понятно, в чем неразумность данного подхода. Подход может быть разумен или не разумен для каких-то определенных задач. Объем индексов в Hyperindex будет действительно большой, но зато можно обеспечить очень быстрый поиск. В MOLAP вообще есть такое понятие как "взрыв данных". Когда данных очень много и в MOLAP хранятся заранее вычисленные агрегаты. И все равно для ряда задач (когда данных немного) такая технология используется. Для других используется ROLAP и т.д. В Hyperindex такой проблемы нет, так как благодаря индексным структурам все агрегаты очень быстро вычисляются при запросе. Вадим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 12:28 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
VadimFОбъем индексов в Hyperindex будет действительно большой, но зато можно обеспечить очень быстрый поиск. Ну хорошо, обратимся опять же к моему примеру: Итак, 200,000,000 записей, bitmap-индекс по одному из данных. Задача: быстрая выборка соответствующих записей по заданному значению индекса. Реализация: читаем 3,125 chunks битмапов, по каждому из них "очень быстро" вычисляем номера записей, а потом уже эти записи читаем. Ну и чего, спрашивается, выигрываем? 3,125 константных чтений, даже если результатом является только одна запись? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 13:16 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Зет Sergei Obrastsov >>Странный ответ. Так как ходим до 8-го уровня-то, через $Query или 8 вложенных циклов? Нет никакого смысла обрабатывать всё уровни одновременно. Так что конечно циклы - но они разнесены - каждый кусок кода работает со своей частью. Это очень интересно. Я бы очень хотел увидеть как можно добраться до 8-го уровня, минуя предыдущие 7. Зет >>Не разумнее ли было бы переписать так: Нужно будет взглянуть.... ссылка на последний "глобал" ? В кирстене такой подход не рассматривается :( хотя встречал его в некоторых %рутинах Стандартный выход на "неполный синтаксис", для обработки узлов на одном уровне - наиболее быстрый вариант, вот тут уж точно быстрее не придумаешь, не меняя структуры. Объяснить чем плохо @pos@(i) в цикле? Зет >>Замечательный подход. :) структур может быть несколько одинаковых в разных узлах или просто в разных глобалах. Поясните пожалуйста эту фразу, я ничего не понял. Зет Лично я использую для переноса расчетов в локальную память. То есть используем косвенность для выборки данных, потом переносим их в "локальную память", а уж потом считаем? Я ничего не напутал? А что это за "расчеты в локальной памяти", можно поподробнее? Зет >>На пальцах? Давайте конкретные примеры, посмотрим. Не понял .... возьмите $d - в языке есть нечто более эффективное для её функции ? Смотря в каком случае. Я же говорю, на пальцах неудобно, нужно смотреть конкретные примеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 13:32 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
StplТ.е. как я понимаю ^Data("d", ^Data("o"... могут понадобится как дополнительные глобалы а не как замена ^Data(Org,Account,Date) Или я никак не пойму чтото главное? Главное здесь - уход от "длинной структуры" вида ^Data(i1,i2,i3...i10) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 13:36 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei ObrastsovГлавное здесь - уход от "длинной структуры" вида ^Data(i1,i2,i3...i10)ок, попробуем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 14:00 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei Obrastsov >>Это очень интересно. Я бы очень хотел увидеть как можно добраться до 8-го уровня, минуя предыдущие 7. Непонятно что тут интересного - я ж такого не писал. Одна процедура обрабатывает три уровня вторая два - остальные выбираються либо из параметров либо из результатов расчета. 8-мь это максимальный уровень - наиболее часто используемый как был 2-3 так и остался >>Объяснить чем плохо @pos@(i) в цикле? Если вы про быстрее то не нужно - объясните лучше - в теле цикла с неполным синтаксисом можно использовать пробег по другим "глабалам" ? >> Поясните пожалуйста эту фразу, я ничего не понял. Код: plaintext 1. 2. 3. >>То есть используем косвенность для выборки данных, потом переносим их в "локальную память", а уж потом считаем? Я ничего не напутал? А что это за "расчеты в локальной памяти", можно поподробнее? Локалка используется в зависимости от объема данных. А расчеты обычные - не олап. Отгрузить, разбить на подпериоды, произвести 5-6ть пересечений, тарифицировать, получить план, сделать предвариловку за полгода и т.п. >>Смотря в каком случае. Я же говорю, на пальцах неудобно, нужно смотреть конкретные примеры. Боюсь что окончательно вас не понял.... вы про алгоритмически достижимую скорость ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 15:47 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Большая просьба от владельца триальной версии (у нее размер кэша 2М если я не ошибаюсь) Попробуйте пожалуйста запустить на комерческой версии вложенный тест и отпостите (или на stpl@mail.ru) пожалуйста строку со временем выполения и желательно с некоторыми параметрами железа, по крайней мере память,процессор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 09:46 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
%SYS>w $zv Cache for Windows NT (Intel) 5.0.21 (Build 6408) Tue Jan 3 2006 13:28:20 EST %SYS>zn "test" TEST>d ^test assign global: 1000x500x100... 50000000values assigned in 50.218sec and read in 52.829sec TEST> ----- Процессор - AuthenticAMD ~1809 МГц объем памяти 1 048 048 КБ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 12:14 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Спасибо! а результаты любопытные. Я думал на коммерческой версии будет быстрее за счет большего кэша (а так результаты эквивалентные видимо за счет более быстрого процессора) и странно что чтение получилось дольше записи. (У меня на триале существенно быстрее записи) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 12:31 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Stpl Спасибо! а результаты любопытные. Я думал на коммерческой версии будет быстрее за счет большего кэша (а так результаты эквивалентные видимо за счет более быстрого процессора) и странно что чтение получилось дольше записи. (У меня на триале существенно быстрее записи) Это из-за увеличения файла cache.dat при записи. :) Потому как разницы быть не должно, все ссылки не совпадающие, от кэша толк минимальный. Я, честно говоря, не понял смысл этого теста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 12:44 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
я думал что обращение к "соседним" элементам массива будет покрываться кэшем и поэтому расчитывал на более быстрое чтение из массива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 13:01 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Stplя думал что обращение к "соседним" элементам массива будет покрываться кэшем и поэтому расчитывал на более быстрое чтение из массива. Только не в случае большого количества ссылок. В этом случае кэш обновляется гораздо раньше, чем успевает сработать. :) Конечно, какой-то выигрыш из-за размера кэша есть, но он маленький очень. В такой ситуации неплохо спросить себя, а чего собственно нужно-то? Быстрый fullscan? Это несерьезно. Значит надо искать другие пути. Потому и дана свобода работы со с массивами, чтобы не перебирать их тупо от начала до конца. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 13:06 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
ОК, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 13:10 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Большой кэш дал бы эффект, если бы глобал ^Data полностью в него поместился. Для данного конкретного примера потребуется 700-800Мб кэша. Эффект проявился бы на последующих проходах по глобалу (если не килять его в конце, как в примере :). Но с кэшем 800Мб легко уходит в своп даже 1Гб PC... Оценивать производительность, имея под рукой лишь триал, ИМХО, несерьезно. ISC временные ключи вроде бы выдает без проблем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 14:13 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Hampster-MumpsterБольшой кэш дал бы эффект, если бы глобал ^Data полностью в него поместился. Для данного конкретного примера потребуется 700-800Мб кэша. Эффект проявился бы на последующих проходах по глобалу (если не килять его в конце, как в примере :). Но с кэшем 800Мб легко уходит в своп даже 1Гб PC... Ну засунул я его в кэш полностью, 700Mb, i/o отсутствует напрочь, выигрыш - 68%. Даже не в разы. Не знаю, что у Вас там "уходит в своп", у меня как раз 1Gb PC. :) Вывод: система действует с кэшем в 30Mb при работе с таким массивом , почти одинаково как и с 300Mb, сиречь на максимуме возможностей. Ну а чему удивляться-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 14:37 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei ObrastsovНу засунул я его в кэш полностью, 700Mb, i/o отсутствует напрочь, выигрыш - 68%. Соврал. 32%, совсем разучился считать. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 14:47 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 14:52 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
StplВсем спасибо!Как успехи в построении БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 09:35 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
увы, пока отказался от Caché. Возможно я чтото не понимаю в этой жизни, но ч.б. сделать нужную мне "модель" мне придется заниматься обычным программированием на каше. Мне кажется для этого есть более подходящие языки программирования. А использовать Caché только для хранения многомерных данных довольно накладно. В общем на мой взгляд Caché и COS в частности это средство не программирования а работы с данными (пусть даже это объекты), и для моих данных я не нашел в каше готовой поддержки, а программировать ее на COS рука не поднимается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 09:52 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Stplувы, пока отказался от Caché. Возможно я чтото не понимаю в этой жизни, но ч.б. сделать нужную мне "модель" мне придется заниматься обычным программированием на каше. Мне кажется для этого есть более подходящие языки программирования. Более подходящие для чего? Для работы с данными? Очень сомневаюсь в этом. :) Stpl А использовать Caché только для хранения многомерных данных довольно накладно. Согласен. Stpl В общем на мой взгляд Caché и COS в частности это средство не программирования а работы с данными (пусть даже это объекты), и для моих данных я не нашел в каше готовой поддержки, а программировать ее на COS рука не поднимается. Ну, что тут скажешь? Каждый привык к чему-то своему. Кому-то готовые решения подавай, а кто-то и сам их создает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 10:58 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei Obrastsov Stplувы, пока отказался от Caché. Возможно я чтото не понимаю в этой жизни, но ч.б. сделать нужную мне "модель" мне придется заниматься обычным программированием на каше. Мне кажется для этого есть более подходящие языки программирования. Более подходящие для чего? Для работы с данными? Очень сомневаюсь в этом. :) скорее для вычислений. Например нужен алгоритм для какогото расчета по имеющимся в базе данным. Извелечь данные Caché может лучше всех. А дальше мне надо написать код вычислений. Так вот этот код как раз писать на COS мне и не хочется (а вынести это в другой слой приложения тоже не получится т.к. он д.б. в непосредственной близости к данным изза постоянной работы с ними) Sergei Obrastsov Stpl В общем на мой взгляд Caché и COS в частности это средство не программирования а работы с данными (пусть даже это объекты), и для моих данных я не нашел в каше готовой поддержки, а программировать ее на COS рука не поднимается. Ну, что тут скажешь? Каждый привык к чему-то своему. Кому-то готовые решения подавай, а кто-то и сам их создает. вот мне и придется самому их создавать. И если это задача для программирования, то и язык имхо должен быть языком программирования а не скриптом. Впрочем уверен что тот кто много лет работает с Caché скажет что там можно сделать все. Может он даже будет прав. Но тогда мне в команду нужен такой человек. хм... поспрашивать чтоли... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 11:19 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Stpl скорее для вычислений. Например нужен алгоритм для какогото расчета по имеющимся в базе данным. Извелечь данные Caché может лучше всех. А дальше мне надо написать код вычислений. Так вот этот код как раз писать на COS мне и не хочется (а вынести это в другой слой приложения тоже не получится т.к. он д.б. в непосредственной близости к данным изза постоянной работы с ними) На COS действительно можно реализовать любой алгоритм обработки этих данных, и единственное, что может помешать этому - быстродействие полученной программы (подобные системы изначально не предназначались, например, для сложных математических вычислений). Но это преодолимо, есть прекрасный механизм - CallIn, программа обработки может быть написана например на С, и Cache в этом варианте занимается единственным делом, хранит и предоставляет данные. Stpl вот мне и придется самому их создавать. И если это задача для программирования, то и язык имхо должен быть языком программирования а не скриптом. Хотелось бы понять, чем скрипт отличается от языка программирования, чтобы сделать вывод, что такое COS :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 11:36 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
автордля моих данных я не нашел в каше готовой поддержки, а программировать ее на COS рука не поднимается. Станислав, предложение посетить "подвальчик на В.О." остается в силе :) Возможно, Вы найдете здесь недостающую вам готовую поддержку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 12:07 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
LittleCatНа COS действительно можно реализовать любой алгоритм обработки этих данных, и единственное, что может помешать этому - быстродействие полученной программы (подобные системы изначально не предназначались, например, для сложных математических вычислений). Но это преодолимо, есть прекрасный механизм - CallIn, программа обработки может быть написана например на С, и Cache в этом варианте занимается единственным делом, хранит и предоставляет данные. ну вот еще один из пробелов ознакомления, я на это не обратил внимания. Посмотрю. Stpl Хотелось бы понять, чем скрипт отличается от языка программирования, чтобы сделать вывод, что такое COS :-) имхо скрипт это то что не компилируется в выполнимый код. Одна из побочных проблем скриптов и COS в частности это невозможность полного синтаксического контроля при компиляции. Думаю список может быть длинным, а я про наболевшее :) в целом у меня серьезных вычислений нет. Взамен стоит задача расчета/аггрегации данных многомерном массиве. Это можно описать примерно так: многомерная матрица с деревьями на гранях/размерностях и работа с ней (хранение и быстрый многопотоковый доступ). Быстрое выявление зависимых и зависящих ячеек. При этом зависимости строятся комбинацией деревьев размерностей + дополнительными связями отдельно накладываемыми на матрицу. Стоит еще учитывать такое свойство дерева как наличие или отсутствие данных в узлах. Из всего пространства этой матрицы и зависимостей вычисляется непустое (оптимизированное) на данный момент множество с которым будет вестись основная работа. При изменении непустых ячеек "меняются" непустые зависимые. При добавлении/удалении данных меняется оптимизированное пространство. Дальше уровень агрегирования данных позволяющий вычислять данные для узлов на основании дерева зависимостей и свойств узлов/листьев (например унарные операторы) а также заданной степени агрегации (для исключения взрывного роста объемов) Т.е. арифметика то простая, а все остальное обычное программирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 12:09 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Stpl Sergei Obrastsov Stplувы, пока отказался от Caché. Возможно я чтото не понимаю в этой жизни, но ч.б. сделать нужную мне "модель" мне придется заниматься обычным программированием на каше. Мне кажется для этого есть более подходящие языки программирования. Более подходящие для чего? Для работы с данными? Очень сомневаюсь в этом. :) скорее для вычислений. Например нужен алгоритм для какогото расчета по имеющимся в базе данным. Извелечь данные Caché может лучше всех. А дальше мне надо написать код вычислений. Так вот этот код как раз писать на COS мне и не хочется (а вынести это в другой слой приложения тоже не получится т.к. он д.б. в непосредственной близости к данным изза постоянной работы с ними) M писался именно для работы с данными, а не только для их хранения, что тоже немаловажно конечно. Если вспомнить, что характеризует медицинские данные, то это статистика в первую очередь. Что касается расчетов, то это абсолютно не проблема. И совсем не стоит думать о каких-то там пресловутых "тормозах". Речь ведь не о том, что в каком-то другом языке операция сложения происходит в 10 раз быстрее, а об удобстве работы с данными. Впрочем не хочу уподобляться рекламисту, всегда можно сравнить. Я например сравнивал. :) Stpl вот мне и придется самому их создавать. И если это задача для программирования, то и язык имхо должен быть языком программирования а не скриптом. Причем тут "скрипт"? Что ты вообще понимаешь под этим словом в отношении ЯП? Cache Object Script смущает? Ну так это "маркетинговый ход", чтобы уйти от слова MUMPS, а заодно подчеркнуть свои фенечки. :) Stpl Впрочем уверен что тот кто много лет работает с Caché скажет что там можно сделать все. Может он даже будет прав. Но тогда мне в команду нужен такой человек. хм... поспрашивать чтоли... Так оно и есть. Просто ради интереса можно поинтересоваться у окружающих, кто и чего на нем писал. Что насчет "поспрашивать", так никто ведь и не против помочь. Я так завсегда. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 12:24 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=34280807&tid=1559410]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 407ms |

| 0 / 0 |
