powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как сделать переиндексацию строк в глобале
12 сообщений из 12, страница 1 из 1
Как сделать переиндексацию строк в глобале
    #36332207
fotopravka.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как сделать переиндексовку файлов?
Раньше индекс (ID) был с 1. После удаления строк стал 20000.
см рисунок
Суть проблемы в следующем. Нужно будет удалять промежуточные данные. И таких удалений будет много. Хотелось бы в дальнейшем иметь возможность переиндексировать строки, чтобы они шли по порядку и начинались с единицы (с 1).
Какие могут быть предложения?
Экспорт глобала во внешний файл, удаление из базы и импорт его в базу ничего не дали. Нумерация так и осталась с 20000.
...
Рейтинг: 0 / 0
Как сделать переиндексацию строк в глобале
    #36332284
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разумеется выгрузка-загрузка, ничего не решит
там довольно большое число может быть в индексе, вы уверены что вам действительно это нужно ?

если да, то единственный выход это написать соответствующую обработку, только эта обработка должна отвечать за разрешение зависимостей, и то что бы данные не потерялись когда вы им смените ID
если вы используете класс, и этот класс не зависит от других и от него ничего, нет зависимостей, типа отношений, или связь потомок-родитель, и так далее, где могут в другой таблице, быть ссылки на содержимое этой. то тут все просто, пробегаетесь по очереди по пересохраняте с другим ID, выставляете последний ID, перестроить индексы, и все можно дальше работать. все это можно сделать на уровне глобалов не затрагивая объектов.

а вот если есть зависимости, то думаю лучше пользоваться уже объектной моделью, с переопределением зависимых ID, иначе у вас ссылки будут ссылаться не туда

если вы удаляете, совсем все данные, то можно воспользоваться методом %KillExtent(), он удалит и данные и кто му же сбросит счетчик ID
_________________________________
Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST
...
Рейтинг: 0 / 0
Как сделать переиндексацию строк в глобале
    #36332513
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем вы хотите удалять промежуточные ID?
...
Рейтинг: 0 / 0
Как сделать переиндексацию строк в глобале
    #36332575
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fotopravka.ruСуть проблемы в следующем. Нужно будет удалять промежуточные данные. И таких удалений будет много. Хотелось бы в дальнейшем иметь возможность переиндексировать строки, чтобы они шли по порядку и начинались с единицы (с 1).
Какие могут быть предложения?


Анологично предыдущему вопросу

Код: plaintext
1.
2.
3.
4.
5.
 s ind= 0 ,cnt= 1  for  { set ind=$order(^B.ADD(ind)) quit:ind=""  
  if cnt<ind { merge ^B.ADD(cnt)=^B.ADD(ind) kill ^B.ADD(ind) }
  s cnt=cnt+ 1 
 }
 s ^B.ADD=$order(^B.ADD(""),- 1 )

Вот только задача у вас кривая - вы по сути дела меняете ID у записей - если у вас это таблица с индексами, то после вышеприведенной программы нужно будет индексы перестраивать.

Если у вас есть другие таблицы ссылающиеся на записи в той которую вы "сжимаете" - то вообще всё равно что удалять файлы с диска через форматирование - всё полет в тар-тарары.

ЗЫ: Какое значение имеет номер индекса к глобале ? Вы что его пользователю показываете и у него психологическая травма приключается ? Задача ей-богу бессмысленная какая-то.
...
Рейтинг: 0 / 0
Как сделать переиндексацию строк в глобале
    #36332626
fotopravka.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMorразумеется выгрузка-загрузка, ничего не решит
там довольно большое число может быть в индексе, вы уверены что вам действительно это нужно ?

Я бы не сказал что очень нужно. НО по расчетам, через три месяца, первый ID у меня уже будет начинаться с 46000*24*3=3'312'000 . Просто раздражают такие дырки.

DAiMorесли да, то единственный выход это написать соответствующую обработку, только эта обработка должна отвечать за разрешение зависимостей, и то что бы данные не потерялись когда вы им смените ID
если вы используете класс, и этот класс не зависит от других и от него ничего, нет зависимостей, типа отношений, или связь потомок-родитель, и так далее, где могут в другой таблице, быть ссылки на содержимое этой. то тут все просто, пробегаетесь по очереди по пересохраняте с другим ID, выставляете последний ID, перестроить индексы, и все можно дальше работать. все это можно сделать на уровне глобалов не затрагивая объектов.

Данные ни с чем не связаны, это просто большой объем статистических цифр. Вариант переиндексации конечно выход, да и в инструкциях к Cache написано, что при удалении строк, переиндексация не производятся, но подумал, а вдруг можно выгрузить и загрузить и все перенумеруется.

DAiMorесли вы удаляете, совсем все данные, то можно воспользоваться методом %KillExtent(), он удалит и данные и кто му же сбросит счетчик ID

Я использую для этих целей
Do Kill ^B.ADD (хотя глобал называется В.AD, но в базе глобалов идет как B.ADD)
Ваш вариант даже не встречал в инструкциях. :-(
...
Рейтинг: 0 / 0
Как сделать переиндексацию строк в глобале
    #36332639
fotopravka.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ptn
ЗЫ: Какое значение имеет номер индекса к глобале ? Вы что его пользователю показываете и у него психологическая травма приключается ? Задача ей-богу бессмысленная какая-то.

Если индекс идет как 10'000'000 и как 1 они в Cache занимают один и тот же объем (при одинаковом количестве записей в глобале)?
Если если занимаемый размер один и тот же, то тогда это уже становится делом вкуса. Если нет - то получаем оптимизацию размера.
...
Рейтинг: 0 / 0
Как сделать переиндексацию строк в глобале
    #36332654
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fotopravka.ruа вдруг можно выгрузить и загрузить и все перенумеруется
это бессмысленно, потому как глобал это всего лишь многомерный массив, у которого индексами могут быть любые значения, и что пересчитывать тут непонятно
...
Рейтинг: 0 / 0
Как сделать переиндексацию строк в глобале
    #36332918
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fotopravka.ruСуть проблемы в следующем. Нужно будет удалять промежуточные данные. И таких удалений будет много.
Что мешает хранить промежуточные данные в другой таблице (возможно даже во временной, т.е. в ^CacheTemp.xxx)? Лучше пересмотреть алгоритм решения задачи, чем пытаться делать низкоуровневые "заплатки".
...
Рейтинг: 0 / 0
Как сделать переиндексацию строк в глобале
    #36334125
fotopravka.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что мешает хранить промежуточные данные в другой таблице (возможно даже во временной, т.е. в ^CacheTemp.xxx)? Лучше пересмотреть алгоритм решения задачи, чем пытаться делать низкоуровневые "заплатки".[/quot]

Данные устаревают через 3-4 месяца. тогда их и нужно будет удалять. Разумеется, при таком раскладе не выгодно создавать "временный файл".
...
Рейтинг: 0 / 0
Как сделать переиндексацию строк в глобале
    #36334490
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fotopravka.ruЕсли индекс идет как 10'000'000 и как 1 они в Cache занимают один и тот же объем (при одинаковом количестве записей в глобале)?

Нет - только вот откуда у вас одинаковое кол- записей в глобале ?

То есть вы берете вставляете в таблицу 20-000 записей, потом бац удаляете, и еще 20-000 ?

Иначе как у вас объем одинаковый то будет ?

Ну давайте забудем что каша хранить данные b-дереве и посчитаем 20-000*1 символ - 19Кб, или 20-000*8 символов - 156Кб

fotopravka.ruЕсли если занимаемый размер один и тот же, то тогда это уже становится делом вкуса. Если нет - то получаем оптимизацию размера.

Если вам приходиться проводить оптимизацию размера таким странным образом, и оно имеет для вас весьма важное значение, то имеет смысл еще раз оглядеть структуры используемых данных - что то там не так
...
Рейтинг: 0 / 0
Как сделать переиндексацию строк в глобале
    #36334494
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fotopravka.ruДанные устаревают через 3-4 месяца. тогда их и нужно будет удалять. Разумеется, при таком раскладе не выгодно создавать "временный файл".

Замапьте глобал в отдельную базу - потом эту базу отмонтируете - копируете в архив, на её место подставляете новую - пустую
...
Рейтинг: 0 / 0
Как сделать переиндексацию строк в глобале
    #36334689
neznau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как вариант обойтись не объектами, а обычными глобалами.

3-4 месяца работаете с одним глобалом, далее просто мёрджите его в архивный глобал и удаляете текущий используемый. так он у вас будет инициализироваться каждый раз и уже имеющиеся данные не потеряются.

не буду голословным, приведу пример

Код: plaintext
1.
2.
m ^archive($i(^archive))=^current
k ^current

а вот для работы с текущим используемым глобалом ^current написать класс-обёртку, с необходимыми методами для работы с содержимым. одним из методов, как раз и будет архивирование и инициализация.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как сделать переиндексацию строк в глобале
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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