powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ошибка <STORE> при импорте xml в обьект
34 сообщений из 34, показаны все 2 страниц
ошибка <STORE> при импорте xml в обьект
    #38298345
login54
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Есть задача - импортировать xml файл в обьект, после сохранить обьект. На xml файлах размером меньше 1мб пользовался для этого %XML.Reader, когда файлы с той же структурой стали размером 13мб появилась ошибка "ERROR #5002: Cache error: <STORE>". Кто-нибудь сталкивался с подобным?
Код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ClassMethod LoadFileToDB(filename As %String = "")
{
 s xmlReader=##class(%XML.Reader).%New()
 w "open file"
 s sc= xmlReader.OpenFile(filename)
 d:$$$ISERR(sc) $System.Status.DisplayError(sc)
 q:$$$ISERR(sc) -1
 d xmlReader.CorrelateRoot("SP.Request")
 w !,"xmlReader.Next"
 d xmlReader.Next(.obj,.sc) 
 d:$$$ISERR(sc) $System.Status.DisplayError(sc) 
 q:$$$ISERR(sc) -1
 w !,"save obj"
 s sc= obj.%Save()
 d:$$$ISERR(sc) $System.Status.DisplayError(sc)
 q:$$$ISERR(sc) -1
}


в терминале:
>d ##class(SP.File).LoadFileToDB("E:\spfile_test3.xml")
open file
xmlReader.Next
ERROR #5002: Cache error: <STORE>XMLImportTrap+2^SP.Record.1
q:('sc) -1
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38298381
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
login54 ,

bbsiz
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38298393
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если кардинально не хватает памяти?
Есть способы загрузить XML без ручного распарсивания тегов?
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38298407
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.А если кардинально не хватает памяти?
Есть способы загрузить XML без ручного распарсивания тегов?на 2012.2 bbsiz уже почти не ограничен
а так наверно все зависит от того насколько большое описание одного объекта в этой XML, если один объект там занимает очень много то наверно тяжело будет.
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38298413
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н. ,

%XML.Reader рассчитан на %RegisteredObject, который в памяти.Цитата из документации Note that the object instances created by %XML.Reader are not stored within the database; they are in-memory objects. If you want to store objects within the database, you must call the %Save() method (for persistent objects) or copy the relevant property values to a persistent object and save it.
источник Для загрузки XML в глобалы придётся использовать %XML.TextReader Блок А.Н.А если кардинально не хватает памяти?Докупить. Или чтобы один объект всё-таки помещался в доступную памяти.
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38298433
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitДля загрузки XML в глобалы придётся использовать %XML.TextReader
Собственно, весь вопрос заключается в том, чтобы этого избежать.

servitБлок А.Н.А если кардинально не хватает памяти?Докупить. Или чтобы один объект всё-таки помещался в доступную памяти.Объект находится в файле, повлиять на размер файла нет возможности.
bbsiz сейчас равен примерно 32000, что означает где-то 32 Мб. Увеличить до 48мб (или сколько там?) - совсем не кардинальное решение проблемы.

PS. Вообще завязка объектов IS на оперативную память практически исключает их использование при обработке данных. К сожалению.
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38298443
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.bbsiz сейчас равен примерно 32000, что означает где-то 32 Мб. Увеличить до 48мб (или сколько там?) - совсем не кардинальное решение проблемы.как то очень даже скромно, а сколько буфер глобалов тогда на этом сервере.
я думаю что при возможности использовать больше оперативной памяти, то лучше работать в ней.
лучше не использовать глобалы в качестве временных структур когда есть возможность работать с локальными переменными, в том числе и приватные глобалы (^||global), потому как работа с любыми глобалами в каше построена одинаково и работает медленнее чем с локалами.
так что для улучшения быстродействия стоит переходить на локалы.

и кстати на 2012.2 по умолчанию bbsiz 262Mb
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38298540
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cache 2012.2.3.
Ради эксперимента попробовал в одном из реальных запросов к БД заменить самый нагруженный глобал на локальный массив. Размер массива оказался порядка 5MB - это немного, но по воспоминаниям в старых версиях Cache локальные массивы начинали проигрывать в скорости глобальным гораздо раньше.
Получил ускорение примерно в 10%. Мой тест был несколько искусственным, т.к. именно этот глобал как раз должен был остаться глобалом - я выбрал его лишь по причине наибольшей нагруженности, чтобы увидеть эффект. На совсем тупом тесте (for i=1:1:3000000 set glvn(i)=i) ускорение составило около 30%.
Вопрос: что реально можно делать с (быстрыми) локальными массивами? Работая с глобалами, программист хотя бы уверен, что у него не случится <STORE>. Здесь такая уверенность пропадает: когда-нибудь (как всегда, в самый неподходящий момент) 256MB может не хватить. Альтернатива: снять и этот предел, выставив 2TB, рискуя из-за чьей-то ошибки отправить в глубокий своп весь сервер - мне кажется, едва ли лучше.
Так что рисковать ли надёжностью работы ради эфемерного выигрыша 10% (и даже 30%) в скорости на отдельных участках кода - пусть каждый решает сам.
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38298546
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorкак то очень даже скромно, а сколько буфер глобалов тогда на этом сервере.
Скромно, но это вопрос к IS, почему они так сильно ограничивают память процесса. Буфер глобалов достаточный, но это к вопросу вряд ли относится.
На каше 2012 сейчас перейти нельзя. К тому же, опять не факт, что 256 мб хватит на все нужды. Т.е. это только откладывание проблемы, а не решение.
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38298548
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,

Именно так. К тому же, гораздо большее ускорение можно получить оптимизацией алгоритма.
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38298592
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо ещё учитывать, что в отличие от глобалов, локальные массивы организованы как trie-деревья (технические подробности, к сожалению, мне неизвестны). Поэтому расход памяти существенно выше. В тупом тесте на вставку 3000000 узлов размер глобала - 38MB, а локального массива ~ 92-98MB. Размер локального массива вычислял как разность $s до и после (получилось 98) и по разнице показаний top (столбец RES - получилось 92), так что показания более-менее сошлись.
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38298619
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да насчет того что локальные массивы занимают больше чем тот же массив в глобале это мы знаем
наше приложение активно использует битовые массивы, объем одного массива пока может достигать до 30Mb, в некоторых случаях, например чтобы провести логическую операцию, будет существовать 3 таких одновременно и проводить все это в глобалах не очень быстро.
Конечно все зависит от приложения, но на данный момент у нас с переходом на 2012.2 и после проведенной оптимизации на большее использование локалов, скорость заметно улучшилась.
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38318324
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую.
Тоже возникла ошибка вида <Storage> - и тоже при выгрузке в XML.
Получается, нам нужно увеличить размер глобали bbsiz? Как это сделать? Где именно искать её значение? В разделе "Система > Конфигурация > Память и Старт Системы" пытался изменить настройку "Выделено памяти под кеш программ (МБ)", однако она меняется только для области %Sys(невозможно переключиться на требуемую область).
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38318350
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorchegПриветствую.
Тоже возникла ошибка вида <Storage> - и тоже при выгрузке в XML.
Получается, нам нужно увеличить размер глобали bbsiz? Как это сделать? Где именно искать её значение? В разделе "Система > Конфигурация > Память и Старт Системы" пытался изменить настройку "Выделено памяти под кеш программ (МБ)", однако она меняется только для области %Sys(невозможно переключиться на требуемую область).
этот параметр был в разных местах в разных версиях,
на последних начиная с 2011 или 2012 версии, в Память и старт системы, но другой параметр это "Максимальный объем памяти в расчете на процесс "
на версии 2010 Конфигурация, Дополнительные настройки памяти - bbsiz
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38318354
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorchegПолучается, нам нужно увеличить размер глобали bbsiz? Как это сделать? Где именно искать её значение? bbsiz
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38318379
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servitfeanorchegПолучается, нам нужно увеличить размер глобали bbsiz? Как это сделать? Где именно искать её значение? bbsiz

Спасибо, но ответа на вопрос так и не увидел. Если обращаться к bbsiz через портал управления, то как переключить ту область, которая нам нужна?

И если обращаться, как показано в ссылке выше, то что именно нужно писать? Это обращение через терминал? Нужно ли писать галки, проценты?
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38318427
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorchegСпасибо, но ответа на вопрос так и не увидел. Если обращаться к bbsiz через портал управления, то как переключить ту область, которая нам нужна?

И если обращаться, как показано в ссылке выше, то что именно нужно писать? Это обращение через терминал? Нужно ли писать галки, проценты?Для изменения через Портал не нужно менять никаких областей. Эти настройки действуют на все вновь запущенные процессы для любых областей.
По указанной же ссылке приводится описание параметра из файла cache.cpf , на что указывает вверху путь [Documentation] > [System References] > [Parameter File Reference] > [[config]] > [bbsiz]
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38318502
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ох, изменял из портала, изменял из файлика cache.cpf - всё бес толку. Ошибка всё равно вылетает, несмотря ни на что... При том если выполнять ту же подпрограмму для выгрузки за один месяц - всё нормально работает при базовых настройках. При увеличении срока до двух месяцев - сколько не увеличивай память, всё равно свалится на ошибку... Перезагружаю после изменений каждый раз. В чём еще может быть проблема?
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38318503
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorchegПри увеличении срока до двух месяцев - сколько не увеличивай память, всё равно свалится на ошибку$zv ?
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38318506
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servitfeanorchegПри увеличении срока до двух месяцев - сколько не увеличивай память, всё равно свалится на ошибку$zv ?

Cache for Windows (x86-32) 2012.1 (Build 510U) Wed Nov 2 2011 18:44:24 EDT
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38318568
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorcheg ,

К сожалению, в этой версии максимально допустимый предел памяти на процесс ~ 48Мб.
В версии 2012.2 его подняли до 2 Тб.
Чтобы удостовериться, что дело всё же в нехватке bbsize, посмотрите детали процесса (параметр Memory in Use) через Портал: Display Process Details

PS: попробуйте ещё увеличить gmheap и locksiz
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38318612
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit feanorcheg ,

К сожалению, в этой версии максимально допустимый предел памяти на процесс ~ 48Мб.
В версии 2012.2 его подняли до 2 Тб.
Чтобы удостовериться, что дело всё же в нехватке bbsize, посмотрите детали процесса (параметр Memory in Use) через Портал: Display Process Details

PS: попробуйте ещё увеличить gmheap и locksiz

Подскажите пожалуйста, насколько трудоёмкой может быть задача обновления Cache до версии 2012? Или может быть есть какая-то утилита или на подобии?
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38318647
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorchegПодскажите пожалуйста, насколько трудоёмкой может быть задача обновления Cache до версии 2012?Достаточно следовать нехитрым инструкциям и пройтись по Caché 2012.2 Upgrade Checklist .
Очень желательно перед этим поэкспериментировать на тестовой машине: с той же 32-битной ОС и с тем же объёмом RAM.

PS: почему бы сразу не перейти на версию 2013.1.1 , которая буквально вчера вышла?
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38318686
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

Ну надо с начальством обсудить - они олдфагеры=)

По поводу изменения файлика cache.cpf - увеличил bbsiz в три раза, и на смену ошибке <Store> пришла ошибка <No current object>. Странно, она не должна быть связана с памятью
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38318719
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorchegПо поводу изменения файлика cache.cpf - увеличил bbsiz в три раза, и на смену ошибке <Store> пришла ошибка <No current object>.Это уже лучше, то есть увеличение bbsiz дало таки эффект.feanorchegСтранно, она не должна быть связана с памятьюВсё верно: <NO CURRENT OBJECT> (System Error Messages - K to O).
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38318997
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

interSystems не пишу явно что это и почему... "Там в настоящее время нет объекта" - странное пояснение ошибки. Так или иначе, я понял где копать, спасибо=)
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38319367
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обновление системы не помогло... Проблема как была так и осталась, уверен, дело всё еще в памяти...
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38319914
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorcheg ,

Используйте отладку .
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38320525
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отлаживал, но это мало что дало. Чувствую, дело всё таки в нехватке памяти на объект - и он не создался. Поэтому, наверное, выдаётся такая ошибка. Есть способы увеличить выделяемую память под объект?
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38321139
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня смущает ошибка при вызове метода GetSwizzled() .
Очистка памяти от ранее подгруженных объектов осуществляется через метод %UnSwizzleAt .
Пример №1 (плохой)set obj=##class(demo.test).%OpenId(ID)
set count=obj.Persons.Count()
for i=1:1:count {
  write obj.Persons.GetAt(i).LastName
}Пример №2 (хороший)set obj=##class(demo.test).%OpenId(ID)
set count=obj.Persons.Count()
for i=1:1:count {
  write obj.Persons.GetAt(i).LastName
  do obj.Persons.%UnSwizzleAt(i)
} Пример №1 не закрывает объекты персон, а потому память быстро улетучивается. В то время как Пример №2 подчищает за собой и "промежуточные" объекты не накапливаются в памяти.

Возможно, в этом дело?

Подробнее об этом можно почитать в документации: In-memory Behavior of Relationships
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38321180
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit%UnSwizzleAt
Ух ты, круто! Как иногда не хватало этого метода...
А просто вложенные объекты так выгружать можно?
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38321401
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Ух ты, круто! Как иногда не хватало этого метода...А он разве не давно появился? Например, в 5.2 он есть.Блок А.Н.А просто вложенные объекты так выгружать можно?Пробуйте. Для одиночных объектов достаточно присвоить "", и если больше нет на него ссылок, то объект будет удалён автоматически: Object Values
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38321487
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit
Возможно, в этом дело?



А от чего наследуется класс Demo.test? Можно просто Persistent? И что в общем то делает этот метод? Если вызывает диструктор класса, то почему нельзя написать просто kill obj?
...
Рейтинг: 0 / 0
ошибка <STORE> при импорте xml в обьект
    #38321514
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorchegА от чего наследуется класс Demo.test? Можно просто Persistent?Да, это обычный хранимый класс, наследуемый от %Persistent.
feanorchegИ что в общем то делает этот метод?Ссылку в документации на описание метода привёл выше.
feanorchegЕсли вызывает диструктор класса, то почему нельзя написать просто kill obj?Да, при уничтожении obj уничтожатся и все другие связанные с ним объекты.
Но если в цикле Вы делаете обход миллиона связанных объектов, то все они освободятся только в конце обхода , тогда как предлагается освобождать их тут же.

Есть ведь разница между

Код: plaintext
1.
2.
3.
4.
5.
открыть главный объект
начало цикла
  открыть вложенный объект
  сделать с ним что-то
конец цикла
освободить все объекты

и

Код: plaintext
1.
2.
3.
4.
5.
6.
открыть главный объект
начало цикла
  открыть вложенный объект
  сделать с ним что-то
  освободить вложенный объект
конец цикла
освободить главный объект
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / ошибка <STORE> при импорте xml в обьект
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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