Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Перестроение индексов: когда это необходимо?
|
|||
|---|---|---|---|
|
#18+
Мы сейчас используем такой механизм: при сборке версии удаляются и заново строятся все индексы. Есть желание при каждой сборке сохранять список построенных индексов и при следующей сборке перестраивать только измененные индексы, и создавать только вновь созданные в описании классов. Есть два вопроса: 1. Сталкивался ли кто-то с необходимостью перестроения индекса на работающей системе (классы не изменялись)? Когда может возникнуть такая необходимость? 2. Как можно обойти проблему построения индексов при наследовании? При удалении индексов предков удаляются индексы потомков. Собственно поэтомы мы вынуждены вначале удалять все индексы, а потом все строить заново. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2009, 06:15 |
|
||
|
Перестроение индексов: когда это необходимо?
|
|||
|---|---|---|---|
|
#18+
1. Если нарушена целостность базы, кто-то неудачно покопался в глобале руками например. 2. В наследуемых классах (прямые наследники) индексы не должны пересекаться по именам среди ВСЕХ потомков. 2.1 Однако выложу я прогу одну что ли. AS IS Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. d Class^RBIndex(<имя класса>) Перестройка индексов для всей области d All^RBIndex() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2009, 07:55 |
|
||
|
Перестроение индексов: когда это необходимо?
|
|||
|---|---|---|---|
|
#18+
Ptn, Спасибо. Но осталась одна проблема: Как перестроить только измененные индексы? И она возвращает к старому вопросу: как получить текстовый слепок объекта. В данном случае - хранящегося в базе описания индекса... Неужели без использования перебора по подузлам ^oddDEF("xClass","i","yIndex") не обойтись? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 11:36 |
|
||
|
Перестроение индексов: когда это необходимо?
|
|||
|---|---|---|---|
|
#18+
Вы имеете в виду, что в определении класса изменилось определение индекса, и нужно перестроить именно эти индексы? У нас программисты при выкладывании обновления пишут текстовку к каждому классу, в момент выгрузки файла на диск, и пишут что изменилось в классе и что нужно сделать при его накатывании, в том числе перестройки индексов, запуск каких-то процедур и т.д. Или вы имеете в виду, что у части записей таблицы имеются кривые индексы и нужно именно их найти и перестроить? Я как-то занимался этой проблемой, мне в стандартной перестройке индексов не понравилось, что сначала грохаем все записи индексов, а потом медленно их строим, при этом фактически работу пользователей приходится блокировать, либо перестраиваем индексы без удаления предыдущих, но тогда имеем риск оставить кривые индексные записи. Моя программа перебирала записи таблицы по одной и проверяла индексы для нее, потом проверяла все индексные записи и удаляла неправильные, при этом работоспособность системы не нарушалась. К сожалению, работала она примерно в 5-10 раз медленней стандартной, понимала не все виды индексов и вообще мне было страшно ее использовать :-). В итоге потом отказался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 16:24 |
|
||
|
Перестроение индексов: когда это необходимо?
|
|||
|---|---|---|---|
|
#18+
Блок А.Н., Речь идет об автоматическом процессе сборки версии (у нас это делается 1-2 раза в неделю) Так сама сборка классов идет минут 15-ть, а вот перестроение индексов уже минут 25-ть... и это - не предел ;) Комментарии при чекине не особо спасут - их придется парсить, и вероятность ошибки в таком комментарии велика. Да и программер может забыть о чем-то ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 04:24 |
|
||
|
Перестроение индексов: когда это необходимо?
|
|||
|---|---|---|---|
|
#18+
Ptn2. В наследуемых классах (прямые наследники) индексы не должны пересекаться по именам среди ВСЕХ потомков. Попробовал воспроизвести - не компилируется такая ситуация в 2009.1 - говорит, что такой индекс уже занят другим наследником. Также не компилируются переопределенные индексы. (если в следующем далее примере в классе а.В переопределить индекс (вот так: Index NameIndex On Name [ Data = Age ];) то класс перестает компилиться с ошибкой в духе "невозможно переопределить определение Index". Ptn #; индексы перестраиваем в обратном порядке #; из-за наследования - сначала дети потом родители Позволим себе небольшой эксперимент: Возьмем 3 класса: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. >d ##class(a.A).Populate(5) >d ##class(a.B).Populate(5) >d ##class(a.C).Populate(5) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Сделаем еще хуже - поправим ручками глобаль. Было Код: plaintext Код: plaintext >d ##class(a.C).%BuildIndices(,1) И смотрим, что получилось: Код: plaintext Очевидно, не врет документация, когда говорит: ИСBeginning with version 2009.1, %PurgeIndices validates the name of the indices it is passed. If the index does not originate in the current class then it cannot be purged. Note: There is an exception to this rule; if the current class is the extent root class and the index is inherited or originates here, it is valid for building and purging. Заходим с тыла: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2010, 09:59 |
|
||
|
Перестроение индексов: когда это необходимо?
|
|||
|---|---|---|---|
|
#18+
>d ##class(a.A).%PurgeIndices() Удалились все индексы NameIndex (для всех 3-х классов) >d ##class(a.A).%BuildIndices() Все нормально. В т.ч. и Вася Пупкин ;) Можно сделать вывод: Начиная с 2009.1 индекс - штука, гораздо более отвязанная от классов, наследования и проч., чем индекс в более ранних версиях. Соответственно, пройдя запросом Код: plaintext Еще один вывод: ИС о нас думает! Пошел править программу сборки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2010, 10:07 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=36213956&tid=1558222]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 368ms |

| 0 / 0 |
