Как организовать хранение данных с большим адресным пространством, оставив "прямую" адресацию?

04.11.07

Разработка - Инструментарий разработчика

Это статья про то, как найти альтернативу Перем Массив[10 000 000], уменьшить выделение памяти для структур с многоразрядными адресами, оставив при этом "прямую" адресацию.
Две внешние обработки - примеры реализации двух подходов на объекте "ТаблицаЗначений".

Скачать файлы

Наименование Файл Версия Размер
Пример
.1193390055 5,32Kb
301
.1193390055 5,32Kb 301 Скачать бесплатно
Многоуровневая ТЗ
.1193652719 9,50Kb
247
.1193652719 9,50Kb 247 Скачать бесплатно

Динамическая структура прямой адресации.
Автор Семенов М.Б. Кострома, Россия 2007г.

В данной статье пойдет речь об оптимизации структур данных.
В связи все большими гигагерцами и растущими объемами памяти оптимизация структур данных... зачем?
В области больших объемов хранимых данных, обсчета глобальных процессов (природных?) со многими
неизвестными, перебора игровых комбинаций используется скорее всего не "1С-ка". Попробовать свои силы?
Читая статью svsrus //infostart.ru/articles/230/ решился исследовать эту тему.

В частности, в рассмотренной статье используется таблица значений (кол-во строк : кол-во столбцов)
для хранения значений, раскиданных по "площади". И чем больше эта площадь, тем больше надо будет
памяти. (для ТЗ 1000 х 1000 это 80мб). И скорее всего, из задействованного адресного пространства
для хранения будет использовано не более одного процента. Что же можно предпринять?

Первый вариант: можно добавлять в ТЗ строки и столбцы по мере увеличения адреса значений.
Это можно использовать, если известно, что поступающие в структуру значения первоначально будут
с "маленькими" адресами. В противном случае при первом же поступлении значения с адресом 1000:1000
ТЗ достигнет максимального размера.

Второй вариант: использовать структуры без адресации, например, список значений. Значения из СЗ будем
получать по "представлению" адреса в виде "<НомерСтроки>:<НомерСтолбца>". Подойдет для небольших объемов
СЗ, все-таки поиск значения методом перебора "Получить()" работает медленно. Можно воспользоваться
объектом XBase и на его основе построить структуру аналогичную СЗ, но с индексированным адресом.
Считаю, что это "быстрое" и экономное решение, к тому же достаточно легкое в реализации.

Третий вариант, собственно, сама тема. Идея почти такая же как и в первом варианте - увеличивать
нашу ТЗ по мере поступления значений, только их адреса предварительно пропускать через
"функцию переадресации", уменьшающую количество разрядов реального адреса в ТЗ. Предположу, что такая
"переадресация" очень широко используется в ВТ на аппаратном и на низком уровне программирования.

На примере "площади" это выглядело бы примерно так:

1. Квадрат 25 х 25 разбиваем на подквадраты 5 х 5.
2. Функция переадресации преобразует прямые координаты в <НомерПодквадрата> и <НомерЯчейкиВподквадрате>, причем
нумерация подквадратов и ячеек в них выполняется последовательно по мере поступления новых адресов.
3. Используем полученные координаты как прямые. И будем расширять нашу структуру по мере увеличения адресов.

Во внешней обработке показана упрощенная "одномерная" реализация, используется только "НомерПодквадрата",
основная таблица для хранения данных увеличивается "порциями", - "подквадратами", которые добавляются
вниз таблицы.

Основные функции "переадресации" взамен встроенных методов "ПолучитьЗначение()" и "УстановитьЗначение()":
"ПолучитьЗначТЗ()" и "УстановитьЗначТЗ()" с теми же параметрами.

Для особо больших объемов можно использовать аналогичную перадресацию и для структуры данных в самой
функции переадресации. На любителя рекурсий. :)

Успехов!

29.10.2007
Добавлена внешняя обработка DinTVMultiLevel.ert - развитие идеи, предложенной Fixin,
ее суть: функцию переадресации сделать "жесткой", без использования в ней же дополнительных
структур данных, - "правила" адресации будут "зашиты там же, в основной структуре данных.

В обработке используется объект "ТаблицаЗначений", работа с ним производится след. образом:

НомерСтроки два младших разряда текущего адреса
Колонка 1 (без имени) - значение по указанному конечному адресу (или самым старшим разрядам от него)
Колонка 2 "Ссылка" - ссылка на объект "ТаблицаЗначений" для доступа к значениям с дополнительными
старшими разрядами адреса (новый уровень ТЗ)

На примере это будет выглядеть так:

получить значение по адресу 15: ТЗ.ПолучитьЗначение(15,1);
получить значение по адресу 115: ТЗ.ПолучитьЗначение(15,"Ссылка").ПолучитьЗначение(01,1);
получить значение по адресу 340115: 
ТЗ.получитьЗначение(15,"Ссылка").ПолучитьЗначение(1,"Ссылка").ПолучитьЗначение(34,1);



Адресация сделана одномерной, как в массиве, однако, ничто не мешает ее использовать для
структур с несколькими измерениями с предварительным приведением всех адресов измерений к одному.

Параметры функций и процедур изменены, см. в коде обработки.

См. также

Консоль запросов

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Консоль запросов к базе SQL, не требующая внешних компонент

10 стартмани

29.04.2015    21567    54    Gvozdod    8    

14

StartManager 1.4 - Развитие альтернативного стартера

Инструментарий разработчика Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Очередная редакция альтернативного стартера, являющегося продолжением StartManager 1.3. Спасибо всем, кто присылал свои замечания и пожелания, и тем, кто перечислял финансы на поддержку проекта. С учетом накопленного опыта, стартер был достаточно сильно переработан в плане архитектуры. В основном сделан упор на масштабируемость, для способности программы быстро адаптироваться к расширению предъявляемых требований (т.к. довольно часто просят добавить ту или иную хотелку). Было пересмотрено внешнее оформление, переработан существующий и добавлен новый функционал. В общем можно сказать, что стартер эволюционировал, по сравнению с предыдущей редакцией. Однако пока не всё реализовано, что планировалось, поэтому еще есть куда развиваться в плане функциональности.

1 стартмани

23.04.2014    165748    1864    Alexoniq    1596    

496

Tray Informer

Инструментарий разработчика Платформа 1С v7.7 Платформа 1С v8.3 Россия Абонемент ($m)

Согласитесь, что окно стандартное сообщений в 1С иногда приносит больше неудобств, чем пользы. И тем более разные "Предупредить"... Что с этим окном только не делают! Его отцепают от формы, делают маленьким, умудряются спрятать за границы экрана. А потом звонят программистам с претензией, что документ почему-то не проводится, отя ничего и не пишет. У вас такого не было? А вот у нас было и не раз )))

1 стартмани

04.09.2013    32890    61    O-Planet    78    

49

Изменение структуры баз 1С 7.7 без долгой реструктуризации. Часть 1. Справочники

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

На днях встретил вопрос на форуме про возможность внесения изменений в конфигурацию без долгого сохранения в рабочей базе большого объема. Вот решил поделиться опытом, как это делал я. База у нас была объемом порядка 120 Гб. К базе обращался сайт в режиме 24/7, поэтому важно было быстро сохранять изменения и желательно без последующего монопольного запуска для восстановления индексов и процедур и без отключения пользователей от базы. Это первая часть статьи и посвящена она справочникам. С одной стороны - это самый простой объект, с другой стороны, именно про справочник спрашивалось на форуме. Если статья будет востребована, то я напишу аналогичные про документы, регистры и может еще что.

1 стартмани

13.08.2013    21203    Reptile    5    

35

v7.7 1CDialogControls: Инструмент в помощь разработчику на 7.7.

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Давным давно, когда я еще плотно писал на 7.7 работа с формами была мучительной и неудобной. Приходилось каждый элемент выкладывать, выравнивать на форме ручками, прописывать код в модуле. Иногда при разработке очередной формы приходила в голову мысль: "а где-то я уже похожее делал..." и начинался мучительный поиск подходящего кода в своих запасах........

1 стартмани

21.02.2013    18037    35    MarSeN    14    

16

[Разработчику] Любая таблица значений в OLAP

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Анализируем различные данные в 1С, используя OLAP-технологии со всеми прелестями. Т.е. наглядное отображение данных, быстрые расчеты, горизонтальные и вертикальные группировки любой вложенности, удобная фильтрация, Drag'n'Drop и ещё много приятных вещей от MS. Обработка на входе принимает практически любую таблицу значений (ТЗ в которой колонкам указаны типы значений, строка, число и т.п.), на выходе имеем на форме 1С сводную таблицу и график по этой ТЗ, с которой работаем, как и в Excel со сводной таблицей и диаграммой. Взял за основу разработку «OLAP Анализ счёта» ( http://infostart.ru/public/14964/ ) от JohnyDeath и переделал под любую ТЗ. Опционально используется «Прогресс бар для 1С 77» (http://infostart.ru/public/14061/ ) от Gmix.

1 стартмани

21.12.2012    36110    51    venger    7    

23

Библиотека кода 1С 7.7 (накопленная за 8 лет)

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Весь код на 1С 7.7, собранный для повторного использования за 8 лет работы.

10 стартмани

25.11.2012    34966    248    adhocprog    51    

70
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 26.10.07 15:50
Сообщение было скрыто модератором.
...
2. Shaman100M 1150 26.10.07 16:14 Сейчас в теме
(1) Да, наверно это почти также, но проще. Но организовать в 1с-ке массив массивов? Это как? Таблицу таблиц можно. И, в основании (1) это будет выглядеть так:

6-значный адрес ячейки: abcdef переводим в 100-ичную систему ab cd ef,
а дальше (при наличии всех созданных таблиц):
Код
ТЗ.ПолучитьЗначение(ab+1,1).ПолучитьЗначение(cd+1,1).ПолучитьЗначение(ef+1,1); 
Показать полностью

ну, добавить все проверки...
5. Shaman100M 1150 29.10.07 13:27 Сейчас в теме
Добавил реализацию многоуровневой ТЗ, см. комментарии (1) и (2)
3. Abadonna 3958 27.10.07 05:47 Сейчас в теме
На мой вкус такие разработки гораздо интереснее, чем "Отчет по сотрудникам, выпивающим более 2-х раз в неделю" ;) Плюс
vasilykushnir; das; +2 Ответить
4. Shaman100M 1150 27.10.07 10:01 Сейчас в теме
(3) :) Доброе утро.
Интересно, было бы посмотреть на ТЗ такого отчета: в рабочее/ не рабочее время, место, с кем, итого грамм, вес, количество "пронесло" и "попал"...
Ну лана, все равно это работа для другого программиста: "сб-сника". :)
6. vasilykushnir 63 24.12.07 14:39 Сейчас в теме
(3) Полностью согласен и даже плюсика не жалко.
Оставьте свое сообщение