Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
В Cache' есть прекрасная вещь – многомерные массивы. Они мне прекасно подходят для хранения кэшированных расчетных данных в таком варианте: ^Data(dim1,dim2,dim3,….dim10) Массив разряженный, кол-во возможных елементов по "первым" трем-четырем размерностям около 1000, еще нескольким размерностям - несколько сотен, оставшиеся - несколько десятков. В массиве предполагается хранить double+int+int Чего можно ожидать от доступа к такому массиву? Приличной производительности или полных тормозов? Может быть есть рекомендации для таких случаев? Например не более X размерностей если кол-во елементов >Y или чтото еще? Спасибо,Стас ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 12:17 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
или это случай когда надо брать обычный Persistent класс и строить bitmap индексы? Если да какой порядок разницы в производительности ожидать по сравнению с массивом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 12:27 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
StplВ Cache' есть прекрасная вещь – многомерные массивы. Они мне прекасно подходят для хранения кэшированных расчетных данных в таком варианте: ^Data(dim1,dim2,dim3,….dim10) Массив разряженный, кол-во возможных елементов по "первым" трем-четырем размерностям около 1000, еще нескольким размерностям - несколько сотен, оставшиеся - несколько десятков. В массиве предполагается хранить double+int+int Чего можно ожидать от доступа к такому массиву? Приличной производительности или полных тормозов? Может быть есть рекомендации для таких случаев? Например не более X размерностей если кол-во елементов >Y или чтото еще? Спасибо,Стас Сомнительно, что необходима такая глубина. Обычно 4-5 - уже предел, глубже лезть нет смысла. Не забывай, что добираться до нижних уровней придется через верхние, а это ненавидимые всеми р-субдшниками (sic!) вложенные циклы, не очень удобно. :) Неплохо было бы посмотреть что за данные, может подсказал бы другой вариант. Что то double, int и прочего, нет в M типизации, и в объектах она ложная, можно конечно паковать через $zl, $zw, но ведь и распаковывать придется. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 13:32 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei ObrastsovСомнительно, что необходима такая глубина. Обычно 4-5 - уже предел, глубже лезть нет смысла. Не забывай, что добираться до нижних уровней придется через верхние, а это ненавидимые всеми р-субдшниками (sic!) вложенные циклы, не очень удобно. :) имхо у меня не совсем так: логика построения значений индекса для доступа к массиву всеравно отдельная. Т.е. вызывать ^Data(1000,500,1) или ^Data(33,800,999) определяется отдельной "бизнес:)логикой" и какими средствами она расчитывает индексы сейчас не так важно. меня больше интересует эффективность доступа к тому что я записал в массив т.е. set ^Data(1000,500,1)=DataItem ... $Data(^Data(1000,500,1),DataItem) Или такой подход совсем неверный? Sergei ObrastsovНеплохо было бы посмотреть что за данные, может подсказал бы другой вариант. не хочется загружать конкретными проблемами, это скорее задача для пилота от Intersystems :) с OLAP вы знакомы на уровне общих представлений? Если да то могу попробовать описать в их "терминах", это наверное немного удобнее. Sergei Obrastsov Что то double, int и прочего, нет в M типизации, и в объектах она ложная, можно конечно паковать через $zl, $zw, но ведь и распаковывать придется. :) сорри: %Double, %Integer я планировал писать в массив объекты простого класса например: Код: plaintext 1. 2. 3. 4. Доступа к ^Data "извне" не будет. бизнес-слой будет спрашивать значение у другого класса, который: - определяет индексы для запрошенных данных - провереяет наличие их в ^Data - если их еще нет, или они помечены как устаревшие то считывает их "перебирая" ^Data() для зависимых данных и записывает результат тудаже в ^Data. При изменении исходных данных (в другом классе) срабатывает или триггер или например %OnAfterSave которые для всех данных зависящих от измененных и существующих в ^Data выставляют флажок Dirty (моя пропертя) и записывает изменный DataItem в ^Data Это совсем криво или не очень? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 14:08 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Stpl имхо у меня не совсем так: логика построения значений индекса для доступа к массиву всеравно отдельная. Т.е. вызывать ^Data(1000,500,1) или ^Data(33,800,999) определяется отдельной "бизнес:)логикой" и какими средствами она расчитывает индексы сейчас не так важно. автор Они мне прекасно подходят для хранения кэшированных расчетных данных в таком варианте: ^Data(dim1,dim2,dim3,….dim10) Это кто писал? :) В данном варианте получается 10 уровней, что несколько пугает. Stpl меня больше интересует эффективность доступа к тому что я записал в массив т.е. set ^Data(1000,500,1)=DataItem ... $Data(^Data(1000,500,1),DataItem) Или такой подход совсем неверный? Почему "неверный"? Нормальный подход. Тем более я не знаю что и зачем хранится. Stpl не хочется загружать конкретными проблемами, это скорее задача для пилота от Intersystems :) с OLAP вы знакомы на уровне общих представлений? Если да то могу попробовать описать в их "терминах", это наверное немного удобнее. Пиши, попробуем разобраться. Stpl Sergei Obrastsov Что то double, int и прочего, нет в M типизации, и в объектах она ложная, можно конечно паковать через $zl, $zw, но ведь и распаковывать придется. :) сорри: %Double, %Integer За что "сорри"-то? :) Я же говорю, это "ложная" типизация. На самом деле все пишется символьной строкой. Stpl При изменении исходных данных (в другом классе) срабатывает или триггер или например %OnAfterSave которые для всех данных зависящих от измененных и существующих в ^Data выставляют флажок Dirty (моя пропертя) и записывает изменный DataItem в ^Data Это совсем криво или не очень? Да нормально это. Все-таки интересно было бы посмотреть на предполагаемые структуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 14:20 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Количество размерностей на скорость доступа особой роли не играет - вот количество узлов да. Вместо локальных переменных свыше 1000 узлов рекомендуеться использовать глобалы. использовть или нет персистент зависить от того нужно ли вам эти расчётные данные обрабатывать в соотвествии с транзакциями или нет. Лично я такого не держу. У меня вообще весь расчет во времянке - зато легко реализуется предварительный расчет. А рекомендуем сильнее использовать косвенную адресацию - она позволяет обходить кол-во размерностей. >>set ^Data(1000,500,1)=DataItem ... $Data(^Data(1000,500,1),DataItem) Наверное всё таки $Get а не $Data - скажем так - это максимально достижимая на Каше эффективность. >>сорри: %Double, %Integer Но уровне прямого доступа это один фиг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 14:21 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
PtnКоличество размерностей на скорость доступа особой роли не играет - вот количество узлов да. Ну, конечно. Я посмотрю как Вы будете до 10-го уровня добираться. Или "лихим наскоком", через $Query? А ежели данные на каждом уровне? :) Ptn А рекомендуем сильнее использовать косвенную адресацию - она позволяет обходить кол-во размерностей. Точно-точно. При этом достигается сразу 2 цели: программа просаживается по скорости, что очень радует окружающих и становится абсолютно нечитаемой, что очень радует сопровождающих. Ptn >>set ^Data(1000,500,1)=DataItem ... $Data(^Data(1000,500,1),DataItem) Наверное всё таки $Get а не $Data - скажем так - это максимально достижимая на Каше эффективность. Не факт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 14:32 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Stpl Это совсем криво или не очень? совет кашиста - рецидивиста быстро сделайте основу программы без деталей и бантиков как угодно но на рабочих реальных данных и запустите затем вносите поправки уточнения по скорости в узких местах часто тормоз не там где думали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:02 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei Obrastsov автор Они мне прекасно подходят для хранения кэшированных расчетных данных в таком варианте: ^Data(dim1,dim2,dim3,….dim10) Это кто писал? :) В данном варианте получается 10 уровней, что несколько пугает. я писал:) Да, в этом примере 10 уровней для организации глобала ^Data. Sergei ObrastsovЯ же говорю, это "ложная" типизация. На самом деле все пишется символьной строкой. а, ну да... не привык еще. Sergei Obrastsov Все-таки интересно было бы посмотреть на предполагаемые структуры. CASE средствами увы не пользуюсь, а ч.б. выслать как-есть... пока еще нечего... полные классы пока еще не рисовал т.к. борюсь с азами и синтаксисом. Если вкратце "на словах". Объекты справочники - они же размерности в терминах olap: OrgTree, AcountsTee,ProductsTree,BusinessTree,UserTree,... - это деревья по структуре: классы вероятно с parent-child Relationship "на себя" (обычное SQL решение, похоже в каше готовой поддержки нету. Наверное сделаю для них базовый классик с поддержкой нужных функций дерева) Currencies,DataLevels,AccountingPeriods,...- классы для "обычных плоских" таблицы со своими пропертями Основная таблица данных или фактов: класс с пропертями ID для каждой размерности (например OrgID, AccountID, Date, ….) и данными Value,Currency,… ну и вспомогательные таблички типа ExchangeRates. Если бы это было на олап моторчике то былабы еще размерность времени с несколькими иерархиями: Year-HalfYear-…. Year-Week-…. И т.п. Здесь встрою ее как есть внутрь расчетной части ^Data я предполагал как массив с доступом по полной комбинации всех ключевых размерностей, например ^Data(OrgID,AccountID,Date,….). Это конечно не ответ на заданный вопрос но словесное описание нижнего слоя, надеюсь это обясняет почему в ^Data хочется много уровней. Дальше я еще не готов.... освоение целины продолжается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:04 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
MX -- ALEX Stpl Это совсем криво или не очень? совет кашиста - рецидивиста быстро сделайте основу программы без деталей и бантиков как угодно но на рабочих реальных данных и запустите затем вносите поправки уточнения по скорости в узких местах часто тормоз не там где думали пытаюсь.... медленно получается ;) в смысле не пишется очень медленно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:06 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Stpl^Data я предполагал как массив с доступом по полной комбинации всех ключевых размерностей, например ^Data(OrgID,AccountID,Date,….). Это конечно не ответ на заданный вопрос но словесное описание нижнего слоя, надеюсь это обясняет почему в ^Data хочется много уровней. Дальше я еще не готов.... освоение целины продолжаетсяОбъяснять-то объясняет... И все-таки я советовал бы задуматься над структурой. Совершенно не обязательно делать ^Data(OrgID,AccountID,Date,...), когда можно сделать: Код: plaintext 1. 2. 3. Это конечно всего лишь вариант "развешивания по веткам", но принцип надеюсь понятен. Конечно хочется реализовать то, что видишь сразу, но обычно приходится либо возвращаться и переписывать все структуры, либо мучиться с промежуточными массивами, делая то же самое, что предлагаю я, только на единственной "узкой" структуре и только на время конкретного запроса. Выигрыша понятное дело никакого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:48 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
MX -- ALEX Stpl Это совсем криво или не очень? совет кашиста - рецидивиста быстро сделайте основу программы без деталей и бантиков как угодно но на рабочих реальных данных и запустите затем вносите поправки уточнения по скорости в узких местах часто тормоз не там где думали Плохой совет. :( Обычно это приводит к неуклюжей программе/комплексу, который больше половины своего времени тратит на создание промежуточных массивов, только из-за того, что структуры не были продуманы изначально. Не надо давать такие советы новичкам, плохих программ и без этого полным-полно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:56 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei ObrastsovЭто конечно всего лишь вариант "развешивания по веткам", но принцип надеюсь понятен. конечно понятен но не подходит. Данные в ^Data мне нужны на пересечении всех размерностей. Т.е. данные за AccountID=1 сами по себе не имеют смысла, они появляются только когда определены все остальные размерности Date,OrgID и т.д. А этот вариант подошелбы например для реализации олаповских запросов по неполным размерностям, там действительно можно спросить данные например только по одной размерности, при этом для всех остальных будет принято некоторое дефолтное значение. Но мне это сейчас не нужно, я подбираю хранение результата на пересечении всех размерностей/индексов. Например HyperIndex из этой области, но я думал попытаться обойтись глобалом т.к. данных не так уж и много. и я полагал что простой глобал быстрее таблицы пусть даже с bitmap индексами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 17:20 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei ObrastsovПлохой совет. :( Обычно это приводит к неуклюжей программе/комплексу, который больше половины своего времени тратит на создание промежуточных массивов, только из-за того, что структуры не были продуманы изначально. Не надо давать такие советы новичкам, плохих программ и без этого полным-полно. Я в защиту MX -- ALEX! Я сейчас "плохо видеть и говорить на M, COS и т.п." и одним теоретическим проектированием тут мне не обойтись, нужны эксперименты, и как раз именно сейчас. потом будет поздно потому что их небыло вначале :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 17:25 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei ObrastsovНу, конечно. Я посмотрю как Вы будете до 10-го уровня добираться. Или "лихим наскоком", через $Query? А ежели данные на каждом уровне? :) Ну зачем же так жестоко - данные они ж с определенным умыслом так зафигачены. У меня правда всего 8-мь уровней Sergei Obrastsov Точно-точно. При этом достигается сразу 2 цели: программа просаживается по скорости, что очень радует окружающих и становится абсолютно нечитаемой, что очень радует сопровождающих. насчет скорости - чем то всё равно придётся жертвовать а вот насчет читабельности резко не соглашусь - косвенность позволяет выделить обработу отдельных кусков - в нормальню запись. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. >>Не факт. Поясните ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 18:16 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Ptn Sergei ObrastsovНу, конечно. Я посмотрю как Вы будете до 10-го уровня добираться. Или "лихим наскоком", через $Query? А ежели данные на каждом уровне? :) Ну зачем же так жестоко - данные они ж с определенным умыслом так зафигачены. У меня правда всего 8-мь уровней Странный ответ. Так как ходим до 8-го уровня-то, через $Query или 8 вложенных циклов? Ptn Sergei Obrastsov Точно-точно. При этом достигается сразу 2 цели: программа просаживается по скорости, что очень радует окружающих и становится абсолютно нечитаемой, что очень радует сопровождающих. насчет скорости - чем то всё равно придётся жертвовать а вот насчет читабельности резко не соглашусь - косвенность позволяет выделить обработу отдельных кусков - в нормальню запись. А почему чем-то обязательно "придется жертвовать"? Я например ничем жертвовать не хочу. Косвенность дает гибкость, я согласен, иногда приходится использовать, особенно на неизвестных структурах, тут уж по-другому никак. Но жертовать скоростью и порядочностью программы из-за нежелания дублировать несколько строк - это несерьезно. Ptn Код: plaintext 1. 2. 3. 4. 5. 6. 7. Не разумнее ли было бы переписать так: Код: plaintext 1. 2. 3. 4. а еще разумнее Код: plaintext 1. 2. 3. 4. Ptn Код: plaintext 1. 2. 3. 4. Ага. Именно поэтому смущенно отводят глаза в сторону при вопросах о производительности SQL и объектов в Cache. Ptn И потом кому кукое дело где реально этот узел лежит - хоть запереносись его по реальной структуре Замечательный подход. :) Ptn >>Не факт. Поясните ? На пальцах? Давайте конкретные примеры, посмотрим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 23:37 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
StplЯ в защиту MX -- ALEX! Я сейчас "плохо видеть и говорить на M, COS и т.п." и одним теоретическим проектированием тут мне не обойтись, нужны эксперименты, и как раз именно сейчас. потом будет поздно потому что их небыло вначале :) Эксперименты конечно нужны, но нельзя подходить к программе таким способом, дескать главное начать, а потом поправим. К сожалению, на практике оказывается, что поправлять бывает поздно и приходится уже идти начатым путем. Сколько раз на вопрос "А почему через ж...?" приходилось слышать грустный ответ "Ну вот, так получилось, возвращаться уже поздно было". Посему совет: лучше просидеть на старте больше положенного, зато получить удобные структуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 23:43 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei ObrastsovЭксперименты конечно нужны, но нельзя подходить к программе таким способом, дескать главное начать, а потом поправим. К сожалению, на практике оказывается, что поправлять бывает поздно и приходится уже идти начатым путем. Сколько раз на вопрос "А почему через ж...?" приходилось слышать грустный ответ "Ну вот, так получилось, возвращаться уже поздно было". Посему совет: лучше просидеть на старте больше положенного, зато получить удобные структуры. абсолютно согласен. только я как раз на старте и сижу. причем похоже еще гдето в раздевалке :| но это мои проблемы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 23:57 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
StplНо мне это сейчас не нужно, я подбираю хранение результата на пересечении всех размерностей/индексов. Нда... Ну ладно, смотрим: Код: plaintext 1. Получить данные по Date (я правильно полагаю что это дата?) можно только уже имея OrgID и AccoutID. Ну а если необходима разбивка по датам? А если нужен конкретный диапазон дат? Stpl Например HyperIndex из этой области, но я думал попытаться обойтись глобалом т.к. данных не так уж и много. и я полагал что простой глобал быстрее таблицы пусть даже с bitmap индексами HyperIndex - вещь конечно хорошая, но не стоит забывать об объемах. Особенно на больших массивах данных и уж тем более при bit-slicing. Ну вот такой пример: при 200,000,000 записей в БД получаем 3125 chunks по 64,000 бит на одно значение. Я не уверен, что это разумный подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 00:04 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Stpl Sergei ObrastsovЭксперименты конечно нужны, но нельзя подходить к программе таким способом, дескать главное начать, а потом поправим. К сожалению, на практике оказывается, что поправлять бывает поздно и приходится уже идти начатым путем. Сколько раз на вопрос "А почему через ж...?" приходилось слышать грустный ответ "Ну вот, так получилось, возвращаться уже поздно было". Посему совет: лучше просидеть на старте больше положенного, зато получить удобные структуры. абсолютно согласен. только я как раз на старте и сижу. причем похоже еще гдето в раздевалке :| но это мои проблемы... Сергей мне кажется в данной конкретной ситуации нашему уважаемому коллеге все же надо ввязаться в драку и получить материал для размышлений естественно опытный образец программы затем весь переписать заново ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 00:45 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
MX -- ALEX Stpl Sergei ObrastsovЭксперименты конечно нужны, но нельзя подходить к программе таким способом, дескать главное начать, а потом поправим. К сожалению, на практике оказывается, что поправлять бывает поздно и приходится уже идти начатым путем. Сколько раз на вопрос "А почему через ж...?" приходилось слышать грустный ответ "Ну вот, так получилось, возвращаться уже поздно было". Посему совет: лучше просидеть на старте больше положенного, зато получить удобные структуры. абсолютно согласен. только я как раз на старте и сижу. причем похоже еще гдето в раздевалке :| но это мои проблемы... Сергей мне кажется в данной конкретной ситуации нашему уважаемому коллеге все же надо ввязаться в драку и получить материал для размышлений естественно опытный образец программы затем весь переписать заново Дык, Алекс, разве я спорю? :) Только вот кто ему скажет, что надо все переписать заново? Работает, да работает. А плохие привычки приживаются влет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 00:56 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei Obrastsov Код: plaintext 1. AccoutID. Ну а если необходима разбивка по датам? А если нужен конкретный диапазон дат? тогда мы работаем с датами спустившись к ним по Org и Account. А ^Data("d",Date) вроде мне ничего не даст т.к. мне туда и записать то ничего. Можно конечно пойти по пути ^Data("OrgID,AccountID",Date) но это тогда скорее обычная таблица с составным ключем. Sergei Obrastsov Stpl Например HyperIndex из этой области, но я думал попытаться обойтись глобалом т.к. данных не так уж и много. и я полагал что простой глобал быстрее таблицы пусть даже с bitmap индексами HyperIndex - вещь конечно хорошая, но не стоит забывать об объемах. Особенно на больших массивах данных и уж тем более при bit-slicing. Ну вот такой пример: при 200,000,000 записей в БД получаем 3125 chunks по 64,000 бит на одно значение. Я не уверен, что это разумный подход. наверное, но для таких количеств говорить о глобалах наверное тоже неразумно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 09:34 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Stplтогда мы работаем с датами спустившись к ним по Org и Account. А потом группируем по датам в другом массиве? :) Stpl А ^Data("d",Date) вроде мне ничего не даст т.к. мне туда и записать то ничего. Да ну? А ^Data("d",Date,Org,Account) не получится? :) Stpl Sergei Obrastsov HyperIndex - вещь конечно хорошая, но не стоит забывать об объемах. Особенно на больших массивах данных и уж тем более при bit-slicing. Ну вот такой пример: при 200,000,000 записей в БД получаем 3125 chunks по 64,000 бит на одно значение. Я не уверен, что это разумный подход. наверное, но для таких количеств говорить о глобалах наверное тоже неразумно? Серьезно?! Это еще почему?! Прекрасно все работает и для больших количеств :) Просто использование bitmap должно быть разумным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 09:52 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei Obrastsov Stplтогда мы работаем с датами спустившись к ним по Org и Account. А потом группируем по датам в другом массиве? :) Stpl А ^Data("d",Date) вроде мне ничего не даст т.к. мне туда и записать то ничего. Да ну? А ^Data("d",Date,Org,Account) не получится? :) а в чем тогда выигрыш по адресации к отдельным элементам? если я правильно понял это нам дает возможность легко пройти по всем Date+Org или по Date независимо то Org и Account. Т.е. первыми вершинами дерева взять даты и использовать это при нарезке по датам. но дальше мне ведь надо искать нужные Org и Account. Т.е. как я понимаю ^Data("d", ^Data("o"... могут понадобится как дополнительные глобалы а не как замена ^Data(Org,Account,Date) Или я никак не пойму чтото главное? Sergei ObrastsovСерьезно?! Это еще почему?! Прекрасно все работает и для больших количеств :) Просто использование bitmap должно быть разумным. у.... кофе мало выпил, ерунду написал. Глобал, таблица, здесь же они близнецы братья. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 10:12 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei Obrastsov >>Странный ответ. Так как ходим до 8-го уровня-то, через $Query или 8 вложенных циклов? Нет никакого смысла обрабатывать всё уровни одновременно. Так что конечно циклы - но они разнесены - каждый кусок кода работает со своей частью. >>Не разумнее ли было бы переписать так: Нужно будет взглянуть.... ссылка на последний "глобал" ? В кирстене такой подход не рассматривается :( хотя встречал его в некоторых %рутинах >>Замечательный подход. :) Нормальный подход - структур может быть несколько одинаковых в разных узлах или просто в разных глобалах. Лично я использую для переноса расчетов в локальную память. >>На пальцах? Давайте конкретные примеры, посмотрим. Не понял .... возьмите $d - в языке есть нечто более эффективное для её функции ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 10:57 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Stplимхо скрипт это то что не компилируется в выполнимый код. Одна из побочных проблем скриптов и COS в частности это невозможность полного синтаксического контроля при компиляции. Думаю список может быть длинным, а я про наболевшее :) Нет ничего невозможного, когда речь идет о M :) Stpl в целом у меня серьезных вычислений нет. Взамен стоит задача расчета/аггрегации данных многомерном массиве. Это можно описать примерно так: [...] Т.е. арифметика то простая, а все остальное обычное программирование. Ах, вкусная задачка, завидую :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 12:33 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Hampster-MumpsterСтанислав, предложение посетить "подвальчик на В.О." остается в силе :) Возможно, Вы найдете здесь недостающую вам готовую поддержку.как насчет завтра? сейчас отпишусь Алексею мылом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 14:22 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Sergei ObrastsovПросто ради интереса можно поинтересоваться у окружающих, кто и чего на нем писал. Что насчет "поспрашивать", так никто ведь и не против помочь. Я так завсегда. :) мне пока не притянуть чужой опыт. Я пытался поднять эту тему здесь но там обсуждались отдельные вопросы, мне этого оказалось недостаточно. Не отрицаю что виноват м.б. сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 14:28 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Stplкак насчет завтра? ОК. Все же проверьте почту - там некоторые подробности :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 16:50 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Hampster-MumpsterОК. Все же проверьте почту - там некоторые подробности :)Последнее ваше письмо было в 14:52 (я сразу ответил "ОК") а последний пост здесь в 16:50. похоже я остался без каких то подробностей? :) или просто несинхронность переписки? Если все без изменений то можно не отвечать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 17:13 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Stpl Sergei ObrastsovПросто ради интереса можно поинтересоваться у окружающих, кто и чего на нем писал. Что насчет "поспрашивать", так никто ведь и не против помочь. Я так завсегда. :) мне пока не притянуть чужой опыт. Я пытался поднять эту тему здесь но там обсуждались отдельные вопросы, мне этого оказалось недостаточно. Не отрицаю что виноват м.б. сам. Вины здесь никакой нет, конечно. Желательно все-таки разбить задачу на независимые куски и рассматривать их по отдельности, так будет гораздо удобнее и намного проще спрашивать советы. Скажем: фрагмент 1 - "структуры хранения данных", фрагмент 2 - "выборка данных для расчета", фрагмент 3 - "непосредственный расчет" и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 01:18 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Hi! Ptn Вместо локальных переменных свыше 1000 узлов рекомендуеться использовать глобалы. И не просто рекомендуется, а обязательно требуется. ____________________________ С уважением, Лисеев Дмитрий. http://private.peterlink.ru/dimik/ PGP key fingerprint: 09 28 74 28 6C 39 62 29 2E CB 95 03 4F 04 33 73 Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 06:43 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 00:27 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
VadimFОбратите внимание на Process-private Globals . Вадим И что, быстрей работает? Начиная с какой версии это применимо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 12:56 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
"Примерно" с Cache' 5.2 Ответы на такие вопросы стоит искать в Release Notes: http://docs.intersystems.com/cache52/csp/docbook/DocBook.UI.Page.cls?KEY=GRN2 Вадим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 17:03 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
VadimF"Примерно" с Cache' 5.2 Ответы на такие вопросы стоит искать в Release Notes: http://docs.intersystems.com/cache52/csp/docbook/DocBook.UI.Page.cls?KEY=GRN2 Вадим Спасибо. 1. "Не каждая птица долетит до "_ 5.2 2. По указанному урл у меня форум с бразилии грузится, но понятно, что смотри docs.intersystems.com т.е. пара общих слов ни о чем. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 18:45 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 09:40 |
|
||
|
Производительность доступа к многомерному массиву
|
|||
|---|---|---|---|
|
#18+
Никак не получается: http://docs.intersystems.com/cache52/csp/docbook/DocBook.UI.Page.cls?KEY=GRN2 Вадим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 09:42 |
|
||
|
|

start [/forum/topic.php?all=1&fid=39&tid=1559410]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 262ms |
| total: | 397ms |

| 0 / 0 |
