|
|
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
Существуют ли какие-либо красивые способы хранения истории изменений для деревьев Celko? Искал-искал, ничего на этот счёт не нашёл - но кажется, что должны тут быть более красивые решения, чем решение проблемы общим методом (в стиле "завести таблицу такую-же-но-со-столбцом-времени-изменения")? Поскольку все характеристики - числовые и вычисляемые, сразу хочется это дело алгоритмизировать, а не просто тупо хранить слепки. Основная проблема в том, что дерево переобсчитывается при серьёзных изменениях (перемещения ветвей, допустим), причём левый и правый счётчики меняются для всех элементов и, соответственно, запросы на поиск версий и восстановления состояний получаются уж очень монструозными - плюс сопровождаются новым пересчётом. В качестве решения видится что-то вроде помечания удалённых и перемещённых узлов соответствующим флагом, и на новом месте создавать узлы новые - а чтобы избежать необходимости пересчёта, резервировать некоторый диапазон - например, счётчик пусть увеличивается не на 1, а, допустим, на 1000 с целью помещения в этот диапазон новых элементов в будущем. Конечно, правильно деревья хранить в XML, но это часть большой базы, которую в остальном вполне себе реляционна, и дробление её по технологиям не выглядит слишком разумным. Если это уже обсуждалось, буду благодарен за ссылку, но я ничего подобного не нашёл ни в русском, ни в англоязычном поиске. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2006, 21:56 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
> Существуют ли какие-либо красивые способы хранения истории изменений > для деревьев Celko? "Деревья Celko" - они не для практического применения, Вас кто-то обманул. > в стиле "завести таблицу такую-же-но-со-столбцом-времени-изменения" Это самое кривое из возможных решений. Странно, что Вы не нашли других. Поищите, в этом форуме проблема обсуждалась раз пятьсот, наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2006, 23:20 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
e"Деревья Celko" - они не для практического применения, Вас кто-то обманул. "А мужики-то не знают" Это самое кривое из возможных решений. Странно, что Вы не нашли других. Поищите, в этом форуме проблема обсуждалась раз пятьсот, наверное. Поискал, ничего не нашёл (и не только на этом сайте). Может, конечно, плохо искал, буду благодарен за ссылку. Пока что самое разумное из предложенного (спросил тоже не только здесь) - хранить отдельно таблицу с id/parent_id и историю для неё, а дерево каждый раз при изменении пересчитывать заново. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2006, 23:24 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
> "А мужики-то не знают" И чьи это проблемы? > буду благодарен за ссылку Легко. http://sql.ru/forum/actualsearch.aspx Искать (кто бы мог подумать!) "история изменений". > самое разумное из предложенного Это "разумное" из серии "деревьев Celko", "схемы Тенцера" и пр. чуши. Т. е. прочесть, посмеяться и забыть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2006, 23:58 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
Уточнение: широко обсуждаются проблемы хранения изменений для плоских данных. Однако при необходимости хранения иерархических изменений подобные методы не годятся по причинам, высказанным в самом первом посте. По ряду этих и других причин меня интересуют методы, подобные тому, что описан опять-таки в первом посте, т.е. методы алгоритмической оптимизации. Если вы считаете, что этот подход заведомо неэффективен, так и скажите, а ещё лучше объясните почему. А посылать "в Яндекс", где в сотый раз выбирают между "ввести поле Deleted" и "ввести таблицу-клон" я и сам умею. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 00:09 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
> плоских данных Дружище, выбрасывайте на свалку Вашу доморощенную терминологию. Не бывает ни плоских, ни узких, ни длинных, ни каких-нибудь еще данных. > методы алгоритмической оптимизации То, что Вы назвали "методами алгоритмической оптимизации" не имеет ни малейшего отношения к хранению истории изменений. > подход заведомо неэффективен Я не вижу подхода. Я вижу корявую поделку. Чтобы объяснить, почему она корявая, нужно начинать это делать сильно издалека и по крайней мере в уверенности, что Дейта Вы прочли полностью. У меня такой уверенности нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 01:03 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
Спасибо, до свидания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 07:27 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
> до свидания Пока-пока. Хотя мне было бы приятнее прочесть о том, что Вы с утра уже заказали "Введение в системы баз данных". Дружище, Вы напрасно расстроились; Вы даже не представляете, сколько времени я Вам сэкономил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 11:36 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
Это я вам "до свидания" сказал. А сам пока ещё тут постою, послушаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 11:40 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
Я думаю что либо статусом рулить либо всета-ки доп колонками "С" "По" они не затрагивают структуру, но позволяют их игнорировать или неигнорироватьв зависимости от условий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 13:47 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
Деревья Celko очень даже хорошо применяются и позволяют делать простые выборки веток, подветок и т.д. Посмотреть реальный пример можно на сайте MySql. Где-то в топиках была прямая ссылка, правда разобраться в методе не так просто, но для умного человека там ничего сложного нет. А на guest_20040621 не обращайте внимания он во многих ветках гонит полную пургу без дела) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2006, 16:52 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
zeroandrДеревья Celko очень даже хорошо применяются и позволяют делать простые выборки веток, подветок и т.д. Посмотреть реальный пример можно на сайте MySql. Где-то в топиках была прямая ссылка, правда разобраться в методе не так просто, но для умного человека там ничего сложного нет. А на guest_20040621 не обращайте внимания он во многих ветках гонит полную пургу без дела) PS: вот нашел ссылку http://dev.mysql.com/tech-resources/articles/hierarchical-data.html, там есть процедуры добавления, вставки и удаления веток их можно доработать в плане сохранения истории. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2007, 15:39 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
Для хранения истории, например, можно к стандартной таблице по Селко добавить две даты : дату создания ветки и дату удаления и соответсвенно изменить запрос на построение дерева в соответствии с текущей датой, при создании веток вставлять дату создания а при удалении обновлять дату удаления, тогда на любой момент времени можно будет построить дерево таким, каким оно было тогда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2007, 15:54 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2007, 17:37 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
zeroandr zeroandrДеревья Celko очень даже хорошо применяются и позволяют делать простые выборки веток, подветок и т.д. Посмотреть реальный пример можно на сайте MySql. Где-то в топиках была прямая ссылка, правда разобраться в методе не так просто, но для умного человека там ничего сложного нет. А на guest_20040621 не обращайте внимания он во многих ветках гонит полную пургу без дела) PS: вот нашел ссылку http://dev.mysql.com/tech-resources/articles/hierarchical-data.html, там есть процедуры добавления, вставки и удаления веток их можно доработать в плане сохранения истории. Позволю себе вмешаться. Я бы не стал вообще связываться с Celko. У этого метода есть очень серьезные недостатки. Если Вам будет нужно что-то поменять в дереве, то Вам придется передергивать ВСЕ данные в соответствующих таблицах. Кроме того, хранить можно только одно дерево , если их много, то придется клонировать эту структуру для других деревьев. Попробуйте взять класическую схему отец-сын и модифицировать ее для ваших нужд. Мне кажется, это будет проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2007, 17:47 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
Пересчитывать каждый раз приходится только в Nested Sets, в модели Nested Intervals пересчёт требуется значительно реже, когда кончается выделенный диапазон. Кроме того, можно пересчитывать только поддерево, а не дерево целиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2007, 17:53 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
k_traut e"Деревья Celko" - они не для практического применения, Вас кто-то обманул. "А мужики-то не знают" Они работают только в случае редкоизменяемых данных, там где количество операций чтения выше чем количество операция записи на 3-4 порядка или же количество элементов не выше 10^5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2007, 16:44 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
Деревья Селко используются тогда, когда требуется дешевый запрос "все потомки данного узла" (без использования connect by и прочей экзотики). У альтернативных способов это обеспечить возникают примерно такие же проблемы с модификациями данных, как и у Селко. Сравнивать деревья Селко с моделью "отец-сын" некорректно - у них разная функциональность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2007, 18:14 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
Я делал реализацию иерархий на основе вложенных множеств... В приципе ничего сложного там нет, на мой взгляд... Да, проблемма, с обновлением существует, но можно сделать не дерево, а лес деревьев, причем добавив всего одно поле... Я остановился на следующем примере, если интерестно (пытался обсуждать на форуме реализацию, но толку никакого): Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 08:30 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
Большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 08:56 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
Немного поясню... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 09:17 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
На практике получается что ID-ParentID нужно все равно хранить даже для деревьев Celko (удобно при использовании всяких компонент и прочего), ну а раз ID-ParentID хранится, то почему бы ее не задействовать в истории. т.е. в истории вместо индексов правых и левых узлов храним ParentID. При необходимости восстановления из истории, просто конвертируем связи ID-ParentID в разметку дерева левыми и правыми индексами. В принципе и left-rigth, если есть необходимость, можно тоже в истории хранить. Ведь добавление/изменение узлов наверняка в хп происходит, там же и историю создавать можно для задействованного в операции ins/upd/delete поддерева. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 17:49 |
|
||
|
Хранение иерархий-деревьев с историей изменений
|
|||
|---|---|---|---|
|
#18+
Роман ДынникНа практике получается что ID-ParentID нужно все равно хранить даже для деревьев Celko (удобно при использовании всяких компонент и прочего), +1 Полностью поддерживаю, т.к. часто необходимо узнать потомков первого уровня для узла, а не всех (что намного проще для Celko деревьев) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2007, 10:05 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=126&tid=1544767]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 399ms |

| 0 / 0 |
