Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Архитектура TreeView


Автор: RadmiR 3.4.2007, 11:13
Скажите пожалуйста, как я понимаю, при работе с БД и выводе данных в TreeView, эти данные необходимо хранить в массиве или промежуточном файле? Или организация хранения данных может быть иная?

Автор: _hunter 3.4.2007, 11:27
можно в массиве, можно и в файле... можно и другую органзицию использовать...

Автор: aktuba 3.4.2007, 11:39
А зачем еще и отдельно хранить???  smile  И так в БД же храняться! Или я чего-то не понимаю?

Автор: Mephisto 3.4.2007, 11:42
Цитата(RadmiR @  3.4.2007,  12:13 Найти цитируемый пост)
Скажите пожалуйста, как я понимаю, при работе с БД и выводе данных в TreeView, эти данные необходимо хранить в массиве или промежуточном файле? Или организация хранения данных может быть иная? 

Я лично делаю специально специфические контейнеры для хранения. Просто, быстро, удобно. Потом по ним строю дерево.  smile 

Автор: RadmiR 3.4.2007, 12:07
Цитата

А зачем еще и отдельно хранить???    И так в БД же храняться! Или я чего-то не понимаю?


Просто хотелось бы, чтобы "из дерева" эти данные могли изменяться...

Цитата

можно в массиве, можно и в файле... можно и другую органзицию использовать...


А как удобнее и БЫСТРЕЕ?

Автор: aktuba 3.4.2007, 13:01
Цитата

Я лично делаю специально специфические контейнеры для хранения. Просто, быстро, удобно. Потом по ним строю дерево.


Т.е. ты считываешь данные из БД в контейнер, а потом уже строишь дерево. Верно? А зачем? Для чего такие потери скорости? Да и где "просто, быстро, удобно"??? Покажи!!!

Цитата

Просто хотелось бы, чтобы "из дерева" эти данные могли изменяться...


А что мешает это делать без использования левых массивов или файлов?

Цитата

А как удобнее и БЫСТРЕЕ? 


Непосредственно в БД.

Автор: RadmiR 3.4.2007, 13:39
Цитата

Непосредственно в БД.


Насколько я понимаю, необходимо хранить id в каком-либо поле, например, в поле Дата узла дерева?

Автор: aktuba 3.4.2007, 14:36
Цитата

Насколько я понимаю, необходимо хранить id в каком-либо поле, например, в поле Дата узла дерева? 


Да, примерно так. А еще лучше - используй VirtualTreeView. Возможностей значительно больше + есть надстройка над VT именно для работы с БД.

Автор: RadmiR 3.4.2007, 15:03
А что такое ВТВ? Это дополнительный компонент или стандартный?

Автор: VICTAR 3.4.2007, 15:59
Дополнительный. Почитай вот http://forum.vingrad.ru/topic-97620/view-all.html

Автор: Mephisto 4.4.2007, 09:33
Цитата(aktuba @  3.4.2007,  14:01 Найти цитируемый пост)
Т.е. ты считываешь данные из БД в контейнер, а потом уже строишь дерево. Верно? А зачем? Для чего такие потери скорости? Да и где "просто, быстро, удобно"??? Покажи!!!

В зависимости от задачи! Если жизненный цикл твоих данных равен всему приложению, то как быть??? А как быть с BLOB полями? Все естественно зависит от задачи. Но большинство задач которые мне приходилось решать оптимально решались в две транзакции. Одна при старте, другая при закрытии. 
А про потери в скорости лучше не говори. Зависит от задачи. Иногда поиск по контейнеру (если организовать как хэш) на порядки быстрее будет проходить чем обход по БД.

П.с. В специфике моей работы время затраченное на открытие и закрытие транзакции неприемлемо. Приблизительно в 5 раз превышает норму.

Так что RadmiR все зависит от того что нужно тебе! А организовать можно как тебе угодно.  smile 

Автор: aktuba 4.4.2007, 10:23
Цитата

В зависимости от задачи! Если жизненный цикл твоих данных равен всему приложению, то как быть??? А как быть с BLOB полями? Все естественно зависит от задачи. Но большинство задач которые мне приходилось решать оптимально решались в две транзакции. Одна при старте, другая при закрытии. 
А про потери в скорости лучше не говори. Зависит от задачи. Иногда поиск по контейнеру (если организовать как хэш) на порядки быстрее будет проходить чем обход по БД.

Так что RadmiR все зависит от того что нужно тебе! А организовать можно как тебе угодно.  smile  


Такой подход полезен, когда база используется только как хранение инфы (т.е, замена обычным файлам). При использовании частого изменения данных в базе, при нескольких пользователях, использующие одну базу - такой подход в принципе не правильный, т.к. получаются огромные затраты на считывание и запись данных. Самое оптимальное - прямое использование базы. А насчет поиска - хеш обычно организовывается в самой базе в отдельной таблице. Вот тебе и вопрос - где будет быстрее, в контейнере, который еще и организовать надо или в отдельной таблице непосредственно в базе...

Автор: Mephisto 4.4.2007, 10:34
Цитата(aktuba @  4.4.2007,  11:23 Найти цитируемый пост)
при нескольких пользователях, использующие одну базу - такой подход в принципе не правильный

Согласен. Слушай, а ты это из первого поста понял что именно так и происходит?
Там написано что дерево строится. smile Если с этой деревяхой нужно буит дальше всякие шаманские действа проводить, то ИМХО контейнер рулит. Особенно в случае VirtualTreeView. 

Да и вообще динамическая деревяха это сильно. 

Автор: aktuba 4.4.2007, 11:57
 smile  Не согласен...

Автор: Mephisto 4.4.2007, 12:05
Цитата(aktuba @  4.4.2007,  12:57 Найти цитируемый пост)
Не согласен... 

Т.е. ты считаешь что лучше написать обертку вокруг самой деревяхи?  smile 
Мне лично проще написать поведение для самого элемента дерева в отдельности. ИМХО верное решение. Не люблю процедурный подход к дереву!  smile 

Автор: aktuba 4.4.2007, 12:54
Не согласен, что твой вывод правильный, насчет первого поста. У меня сложилось ощущение, что человек просто не знал, как вообще это организовать. А насчет обертки - она будет в любом случае, но это не значит, что необходимо забирать данные из базы и хранить во время работы программы отдельно от самой базы...

Автор: Mephisto 4.4.2007, 13:10
Цитата(aktuba @  4.4.2007,  13:54 Найти цитируемый пост)
А насчет обертки - она будет в любом случае, но это не значит, что необходимо забирать данные из базы и хранить во время работы программы отдельно от самой базы... 

Все зависит от жизненного цикла этих данных и сложностю манипуляций с ними. Процедурный метод я б и сам использовал, но только в том случае если это дерево только для просмотра. Если с данными нужно делать какие-то операции - процедурный подход ИМХО фтопку. Хотя конечо все зависит от количества данных, скорости изменения, сложности данных (есть БЛОБ, нет) и.т.п.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)