powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Подумывал тут пойти по деревьям на языке М – есть концептульный вопрос.
10 сообщений из 10, страница 1 из 1
Подумывал тут пойти по деревьям на языке М – есть концептульный вопрос.
    #33197642
kvasov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подумывал тут пойти по деревьям на языке М – есть концептульный вопрос.

1. Можно в узлах глобала хранить данные в виде списков, с последующим выбором элементов списка List-функциями.

2. А можно от списков вообще отказаться, а элементы данных хранить прямо узлами с многомерными индексами в простом «одноэлементном» виде.


Какой вариант лучше и насколько существенно, с точки зрения скорости выборки /места хранения на диске и пр. ?
...
Рейтинг: 0 / 0
Подумывал тут пойти по деревьям на языке М – есть концептульный вопрос.
    #33197676
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень зависит от задачи.
У списка преимущество в атомарности
(либо записалось все, либо ничего).
Пожалуй списки компактнее и быстрее,
если не очень большой список.
...
Рейтинг: 0 / 0
Подумывал тут пойти по деревьям на языке М – есть концептульный вопрос.
    #33198522
kvasov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитал тут в книжке:

---- Прежде чем Cache записывает глобальную переменную, отдельные индексы обьединяются в одну символьную строку. Таким образом, из трехуровнего индекса глобала ^OTD.Tovar(123000,”XL”, “синий”) получается сохраняемая строка символов
OTD.Tovar|123000|XL|синий. Отсюда вытекает, что скорость доступа к индексированным переменным не зависит от числа индексов.


То есть списки всюду.
А если список длинной 3 киллометра и нужен 250-ый элемент, cache начинает что ли сканировать с первого байта и ищет 250 разделителей элементов, чтобы потом считать 250-ый элемент?
...
Рейтинг: 0 / 0
Подумывал тут пойти по деревьям на языке М – есть концептульный вопрос.
    #33199583
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одно дело - значения ключей, другое дело - список который записан в узле.
Если список длинный (тот, который $lb()), то для взятия N элемента пробегается весь список последовательно. Если это критично то используйте хранение в фиксированном формате, и стройте доступ на $extract. В списке не используются разделители - это тего-организованная структура - в начале каждого элемента списка стоит индикатор сколько места на него отводится.
...
Рейтинг: 0 / 0
Подумывал тут пойти по деревьям на языке М – есть концептульный вопрос.
    #33199897
MX--ALEX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яОдно дело - значения ключей, другое дело - список который записан в узле.
Если список длинный (тот, который $lb()), то для взятия N элемента пробегается весь список последовательно. Если это критично то используйте хранение в фиксированном формате, и стройте доступ на $extract. В списке не используются разделители - это тего-организованная структура - в начале каждого элемента списка стоит индикатор сколько места на него отводится.

zxxxxxASDFGHHJKLQWETTYUOPIOPOOP

z-длина списка указателей xxxxx
x-координата начала каждого элемента списка (разделителей нет)

было бы обращение к нужному элементу всегда в 3 счета
независимо от длины списка

почему они так не сделали?
...
Рейтинг: 0 / 0
Подумывал тут пойти по деревьям на языке М – есть концептульный вопрос.
    #33201026
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно я не знаю "почему они" делают так или не так.

Но предложенный вариант тоже можно покритиковать.
1) В приведенном варианте нет информации о длине элемента. Сколько байт брать?
2) Если изменилась длина поля №2, а всего полей N, то сколько указателей понадобится пересчитать если поля предполагается хранить с переменной длиной? Если длина полей фиксирована то зачем вести список указателей на начало?
3) Тегоориентированная структура $lb() имеет преимущество в том, что можно сконкатенировать два списка как последовательность байт и получим новый корректный список.
4) В списках $lb() присутствует упаковка числовых величин.

Идеи с предложениями эффективных структур хранения мне нравятся, готов обсуждать.
...
Рейтинг: 0 / 0
Подумывал тут пойти по деревьям на языке М – есть концептульный вопрос.
    #33201549
MX--ALEX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) В приведенном варианте нет информации о длине элемента. Сколько байт брать?
--- разница между двумя x - этим и следующим (для последего - с общей длиной )

2) Если изменилась длина поля №2, а всего полей N, то сколько указателей понадобится пересчитать если поля предполагается хранить с переменной длиной?
--- в среднем половину - но меняется на порядки реже чем считывается
если это база данных

3) Тегоориентированная структура $lb() имеет преимущество в том, что можно сконкатенировать два списка как последовательность байт и получим новый корректный список.
--- очень на практике редкая операция

4) В списках $lb() присутствует упаковка числовых величин.
--- не нужно паковать - больше мороки
...
Рейтинг: 0 / 0
Подумывал тут пойти по деревьям на языке М – есть концептульный вопрос.
    #33203574
kvasov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно ли я понял, что преимущество хранения информации в самих индексах глобала перед списками в качестве значений узла глобала в том, что глобал всегда сортируется по своим индексам и это оптимизирует $Order–выборки, а если ты запечатал инфу в список, то для какой либо оптимизации выборки инфы из списка, которая там уже никак не отсортирована, ты уже должен создавать 1) обьекты 2) и только эти обьекты умеют создавать отдельные индексные файлы, которые позволяют сортировать инфу, хранящуюся в списках?

А индексные файлы – это кусок технологии обьектов, и если ты отказался от обьектов, то забудь и про эти индексные файлы?

И вывод как-бы такой – где оптимизируешь быструю выборку – надо сохранять инфу в индексах глобала (которые автосортируются), а не в списках (сортировка в которых уже невозможна без обьектов), а сами обьекты – это по большому счету уже проигрышь в производительности, если задача может решаться без них.
...
Рейтинг: 0 / 0
Подумывал тут пойти по деревьям на языке М – есть концептульный вопрос.
    #33203847
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MX--ALEX1) В приведенном варианте нет информации о длине элемента. Сколько байт брать?
--- разница между двумя x - этим и следующим (для последего - с общей длиной )

2) Если изменилась длина поля №2, а всего полей N, то сколько указателей понадобится пересчитать если поля предполагается хранить с переменной длиной?
--- в среднем половину - но меняется на порядки реже чем считывается
если это база данных

Что интересно - похожую структуру (не в точности, но очень похожую) применяет mssql2000 для строк. Именно в такой предварительной служебной структуре строки хранится инфа про размещение строк varchar и nvarchar

MX--ALEX3) Тегоориентированная структура $lb() имеет преимущество в том, что можно сконкатенировать два списка как последовательность байт и получим новый корректный список.
--- очень на практике редкая операция

4) В списках $lb() присутствует упаковка числовых величин.
--- не нужно паковать - больше мороки

Остается предположить, что у разработчиков приоритеты были другими. Кстати, о паковке - это немаловажно - чем компактнее хранятся данные тем меньше дисковых операций. Учитывая, что дисковые операции в очень много раз дороже процессорных (по времени), вполне имеет смысл пойти на решение алгоритмических проблем.
...
Рейтинг: 0 / 0
Подумывал тут пойти по деревьям на языке М – есть концептульный вопрос.
    #33204471
MX--ALEX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvasovПравильно ли я понял, что преимущество хранения информации в самих индексах глобала перед списками в качестве значений узла глобала в том, что глобал всегда сортируется по своим индексам и это оптимизирует $Order–выборки, а если ты запечатал инфу в список, то для какой либо оптимизации выборки инфы из списка, которая там уже никак не отсортирована, ты уже должен создавать 1) обьекты 2) и только эти обьекты умеют создавать отдельные индексные файлы, которые позволяют сортировать инфу, хранящуюся в списках?

А индексные файлы – это кусок технологии обьектов, и если ты отказался от обьектов, то забудь и про эти индексные файлы?

И вывод как-бы такой – где оптимизируешь быструю выборку – надо сохранять инфу в индексах глобала (которые автосортируются), а не в списках (сортировка в которых уже невозможна без обьектов), а сами обьекты – это по большому счету уже проигрышь в производительности, если задача может решаться без них.

у нас вся система (уровня 1с-предприятие)
построена на глобалах без обьектов (обьекты не используем в целях
совместимости MSM - CACHE - M3-LITE )
т е сортировать и создавать индексн глобалы можно и без обьектов
списки используем только по $p() - тоже для совместимости
все работает быстро даже на крупных обьектах
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Подумывал тут пойти по деревьям на языке М – есть концептульный вопрос.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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