Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

Архивировано

Эта тема находится в архиве и закрыта для публикации сообщений.

Eul-

Программирование

Рекомендованные сообщения

Итак, задача не для слабых духом:

Нужно каким-то образом хранить состояние дерева из очень большого количества элементов.

То есть, при первом заходе на страницу создается инстанс и рисуется корень(он не обязательно является вершиной дерева) и 20 его детей первого уровня. Так же нам известно есть ли у его детей еще дети или нет. Если известно что они есть, напротив узла есть значок "+" при нажатии на который происходит запрос на сервер и подгружается 20 детей этого узла. итд, если у узла детей больше 20 то внизу списка есть кнопка "показать еще", которая опять же лезет на сервер. Собственно при уходе со страницы ДОЛЖНО сохраниться состояние дерева со всеми подгруженными узлами. Вот хоть убей не могу придумать как это сделать. Если класть его в сессию для каждого юзера, то сессия очень быстро разбухает, если хранить на клиенте, то придется весь этот мусор таскать в js мапе, хранить в базе ваще лютейший пиздец, весь перформанс убьется. Ну собственно стейтлесс дерево работает стабильно.

 

Итак выслушаю любые, даже самые бредовые идеи. Доступные технологии: Java 1.6, js, jQuery.

список списков, если ты конечно понял о чем я

 

class ListOfLists

{

  List<ListOfLists> Children {get; set;}

}


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

Итак, задача не для слабых духом:

Нужно каким-то образом хранить состояние дерева из очень большого количества элементов.

То есть, при первом заходе на страницу создается инстанс и рисуется корень(он не обязательно является вершиной дерева) и 20 его детей первого уровня. Так же нам известно есть ли у его детей еще дети или нет. Если известно что они есть, напротив узла есть значок "+" при нажатии на который происходит запрос на сервер и подгружается 20 детей этого узла. итд, если у узла детей больше 20 то внизу списка есть кнопка "показать еще", которая опять же лезет на сервер. Собственно при уходе со страницы ДОЛЖНО сохраниться состояние дерева со всеми подгруженными узлами. Вот хоть убей не могу придумать как это сделать. Если класть его в сессию для каждого юзера, то сессия очень быстро разбухает, если хранить на клиенте, то придется весь этот мусор таскать в js мапе, хранить в базе ваще лютейший пиздец, весь перформанс убьется. Ну собственно стейтлесс дерево работает стабильно.

 

Итак выслушаю любые, даже самые бредовые идеи. Доступные технологии: Java 1.6, js, jQuery.

список списков, если ты конечно понял о чем я

При чем тут список списков? :hmm: Если ты троллишь, то это очень толсто, ибо функционал самого дерева уже написан, надо придумать как его хранить для каждого из юзеров.

Поделиться сообщением


Ссылка на сообщение

Итак, задача не для слабых духом:

Нужно каким-то образом хранить состояние дерева из очень большого количества элементов.

То есть, при первом заходе на страницу создается инстанс и рисуется корень(он не обязательно является вершиной дерева) и 20 его детей первого уровня. Так же нам известно есть ли у его детей еще дети или нет. Если известно что они есть, напротив узла есть значок "+" при нажатии на который происходит запрос на сервер и подгружается 20 детей этого узла. итд, если у узла детей больше 20 то внизу списка есть кнопка "показать еще", которая опять же лезет на сервер. Собственно при уходе со страницы ДОЛЖНО сохраниться состояние дерева со всеми подгруженными узлами. Вот хоть убей не могу придумать как это сделать. Если класть его в сессию для каждого юзера, то сессия очень быстро разбухает, если хранить на клиенте, то придется весь этот мусор таскать в js мапе, хранить в базе ваще лютейший пиздец, весь перформанс убьется. Ну собственно стейтлесс дерево работает стабильно.

 

Итак выслушаю любые, даже самые бредовые идеи. Доступные технологии: Java 1.6, js, jQuery.

список списков, если ты конечно понял о чем я

При чем тут список списков? :hmm: Если ты троллишь, то это очень толсто, ибо функционал самого дерева уже написан, надо придумать как его хранить для каждого из юзеров.

class ListOfLists

{

  List<ListOfLists> Children {get; set;}

}

мне если честно - не приходилось иметь дело с деревьями бесконечной "глубины". так что хранил как id, parentid, value. хотя не вижу проблем для того, чтобы хранить в таком виде дерево бесконечной "глубины".

у корня id -1 или 0.


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

Итак, задача не для слабых духом:

Нужно каким-то образом хранить состояние дерева из очень большого количества элементов.

То есть, при первом заходе на страницу создается инстанс и рисуется корень(он не обязательно является вершиной дерева) и 20 его детей первого уровня. Так же нам известно есть ли у его детей еще дети или нет. Если известно что они есть, напротив узла есть значок "+" при нажатии на который происходит запрос на сервер и подгружается 20 детей этого узла. итд, если у узла детей больше 20 то внизу списка есть кнопка "показать еще", которая опять же лезет на сервер. Собственно при уходе со страницы ДОЛЖНО сохраниться состояние дерева со всеми подгруженными узлами. Вот хоть убей не могу придумать как это сделать. Если класть его в сессию для каждого юзера, то сессия очень быстро разбухает, если хранить на клиенте, то придется весь этот мусор таскать в js мапе, хранить в базе ваще лютейший пиздец, весь перформанс убьется. Ну собственно стейтлесс дерево работает стабильно.

 

Итак выслушаю любые, даже самые бредовые идеи. Доступные технологии: Java 1.6, js, jQuery.

список списков, если ты конечно понял о чем я

При чем тут список списков? :hmm: Если ты троллишь, то это очень толсто, ибо функционал самого дерева уже написан, надо придумать как его хранить для каждого из юзеров.

class ListOfLists

{

  List<ListOfLists> Children {get; set;}

}

мне если честно - не приходилось иметь дело с деревьями бесконечной "глубины". так что хранил как id, parentid, value. хотя не вижу проблем для того, чтобы хранить в таком виде дерево бесконечной "глубины".

у корня id -1 или 0.

Ты не совсем понял... У нас все это реализовано, проблема вот в чем: 500 пользователей разом открывают по 1000 нод у деревьев все это нужно запомнить, ибо при переходе пользователя на другую страницу должно сохраниться то же состояние дерева, то есть теже 1000 раскрытых нод. Так вот сессия распухает как на дрожжах.

 

Если хранить это как js то придется все это тащить в пост запросах и пиздячить по кучу мегабайт json-a

Поделиться сообщением


Ссылка на сообщение

Ты не совсем понял... У нас все это реализовано, проблема вот в чем: 500 пользователей разом открывают по 1000 нод у деревьев все это нужно запомнить, ибо при переходе пользователя на другую страницу должно сохраниться то же состояние дерева, то есть теже 1000 раскрытых нод. Так вот сессия распухает как на дрожжах.

 

Если хранить это как js то придется все это тащить в пост запросах и пиздячить по кучу мегабайт json-a

ну я просто не знаю что у вас там за дерево. но по сути структура id, parentid, value (не знаю что у вас там в ветке хранится) и opened по сути ничего лишнего и ничего не выкинешь.

хранится массив из всех веток. можно заменить opened на клиенте на haschildren и дотягивать ажаксом ветки при открытии, а при закрытии удалять ветки. а в базе естественно хранить как userid.  id, parentid, value. опять же при закрытии ветки делать гет запрос по нужному адресу с id ветки, которую ты закрываешь пользователем.

но это только при условии, что всё дерево очень большое


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение
Гость

Есть же хранилище на клиенсайте в хтмл5, юзай его, если тебе не нужна поддержка ие

Поделиться сообщением


Ссылка на сообщение

Есть же хранилище на клиенсайте в хтмл5, юзай его, если тебе не нужна поддержка ие

он же корпоративные приложения разрабатывает. не исключено, что только ие поддержка и нужна  :trollface:

Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

Есть же хранилище на клиенсайте в хтмл5, юзай его, если тебе не нужна поддержка ие

Да тут-то вся проблема, 90% клиентов на IE7 сидят :fffuuu:

 

 

Есть же хранилище на клиенсайте в хтмл5, юзай его, если тебе не нужна поддержка ие

он же корпоративные приложения разрабатывает. не исключено, что только ие поддержка и нужна  trollface.gif

Прав :nate: :nate: :nate:

Поделиться сообщением


Ссылка на сообщение

Есть же хранилище на клиенсайте в хтмл5, юзай его, если тебе не нужна поддержка ие

Да тут-то вся проблема, 90% клиентов на IE7 сидят :fffuuu:

 

 

Есть же хранилище на клиенсайте в хтмл5, юзай его, если тебе не нужна поддержка ие

он же корпоративные приложения разрабатывает. не исключено, что только ие поддержка и нужна  trollface.gif

Прав :nate: :nate: :nate:

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

ну и естественно табличка с деревьями в виде treeid, id, idparent, всякие данные о ветке


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

Ты не совсем понял... У нас все это реализовано, проблема вот в чем: 500 пользователей разом открывают по 1000 нод у деревьев все это нужно запомнить, ибо при переходе пользователя на другую страницу должно сохраниться то же состояние дерева, то есть теже 1000 раскрытых нод. Так вот сессия распухает как на дрожжах.

 

Если хранить это как js то придется все это тащить в пост запросах и пиздячить по кучу мегабайт json-a

ну я просто не знаю что у вас там за дерево. но по сути структура id, parentid, value (не знаю что у вас там в ветке хранится) и opened по сути ничего лишнего и ничего не выкинешь.

хранится массив из всех веток. можно заменить opened на клиенте на haschildren и дотягивать ажаксом ветки при открытии, а при закрытии удалять ветки. а в базе естественно хранить как userid.  id, parentid, value. опять же при закрытии ветки делать гет запрос по нужному адресу с id ветки, которую ты закрываешь пользователем.

но это только при условии, что всё дерево очень большое

хмм..натолкнуло вот на какую мысль, можно создать класс TreeState в котором будет только список раскрытых нод, а все данные грузить на лету. Например:

class TreeState

{

  private State rootState;

}

 

class State

{

  private BigInteger id;

  privale LinkedList<State> childStates;

}

 

А так же будет TreeLoader который будет поднимать из базы или кешей куски дерева по id начального состояния. Тогда в сессии можно хранить только TreeState, а там по сути данных то и не будет, может и прокатить. У нас SVT 500 юзеров по 1000 нод. Но тут блин проблема что для каждого узла дерева может быть собственный рендерер и висеть кастомные экшены... короче надо бы подумать еще.

Поделиться сообщением


Ссылка на сообщение

Есть же хранилище на клиенсайте в хтмл5, юзай его, если тебе не нужна поддержка ие

Да тут-то вся проблема, 90% клиентов на IE7 сидят :fffuuu:

 

 

Есть же хранилище на клиенсайте в хтмл5, юзай его, если тебе не нужна поддержка ие

он же корпоративные приложения разрабатывает. не исключено, что только ие поддержка и нужна  trollface.gif

Прав :nate: :nate: :nate:

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

ну и естественно табличка с деревьями в виде treeid, id, idparent, всякие данные о ветке

у нас проблема в том что мы не можем метамодель менять, то есть у нас нельзя создавать новые таблицы в бд. Это очень сильные ограничения накладывает:( у нас объектная модель с типами, атрибутами, параметрами.

Поделиться сообщением


Ссылка на сообщение

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

состояние всё на сервере


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение
Гость

А почему кукисы использовать нельзя?

Поделиться сообщением


Ссылка на сообщение

у нас проблема в том что мы не можем метамодель менять, то есть у нас нельзя создавать новые таблицы в бд. Это очень сильные ограничения накладывает:( у нас объектная модель с типами, атрибутами, параметрами.

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

Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

А почему кукисы использовать нельзя?

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

Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение
Гость

А почему кукисы использовать нельзя?

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

лол, ну тогда только бд

Поделиться сообщением


Ссылка на сообщение

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

состояние всё на сервере

Думаю ты частично прав, верный ответ узнаем в августе : troll face: Если не забуду, то отпишу к какому решению придем, мне было интересно мнение пдача по такой задачке.

Поделиться сообщением


Ссылка на сообщение
Гость

Посоны, есть илитный домен http://cassie.ru что с ним можно сделать?

Поделиться сообщением


Ссылка на сообщение

Посоны, есть илитный домен http://cassie.ru что с ним можно сделать?

в чем илитность?

Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение
Гость

Не знаю

Есть домен dota-shop.ru но нет желания заниматься с ним

 

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...