Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
10.09.2004, 13:18
|
|||
---|---|---|---|
|
|||
Память и Вектор |
|||
#18+
Вопрос такой. Например мы делаем выборку из БД длинной 100 000 строк. При этом результат помещаем в вектор. При этом выскакивает сообщение OutOfMemory. Как это можно избежать? Я так понимаю, что этого можно избежать делая выборку в несколько этапов. Но как это можно реализовать или есть другие способы. Заранее спасибо за ответы ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2004, 13:43
|
|||
---|---|---|---|
Память и Вектор |
|||
#18+
ДЛя какой цели формируете вектор с данными? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2004, 13:45
|
|||
---|---|---|---|
Память и Вектор |
|||
#18+
да ещё ТАКОГО размера??? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2004, 13:51
|
|||
---|---|---|---|
|
|||
Память и Вектор |
|||
#18+
В таблицу данные положить ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2004, 13:53
|
|||
---|---|---|---|
Память и Вектор |
|||
#18+
порциями данные вытаскивай и порциями клади ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2004, 13:53
|
|||
---|---|---|---|
Память и Вектор |
|||
#18+
akula84 делаем выборку из БД длинной 100 000 строк. При этом результат помещаем в вектор. akula84 В таблицу данные положить И для чего такие маневры. Поясните смысл вами задуманного. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2004, 13:55
|
|||
---|---|---|---|
|
|||
Память и Вектор |
|||
#18+
А как это при помощи JDBC сделать просто where использовать или как еще можно ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2004, 13:56
|
|||
---|---|---|---|
|
|||
Память и Вектор |
|||
#18+
и по сколько данных рекомендуется вытаскивать за раз? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2004, 13:58
|
|||
---|---|---|---|
|
|||
Память и Вектор |
|||
#18+
смысл такой: есть документы с различными статусами. Хочется сразу показать документы с одним статусом, а их там 100 000. Конечно можно сделать фильтр по клиенту и дате... То есть отображать такие большие выборки не рекомендуется? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2004, 14:01
|
|||
---|---|---|---|
Память и Вектор |
|||
#18+
akula84То есть отображать такие большие выборки не рекомендуется? вредно для здоровья JVM ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2004, 14:05
|
|||
---|---|---|---|
|
|||
Память и Вектор |
|||
#18+
а какое максимальное количество выборки? с точностью до 1000 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2004, 14:07
|
|||
---|---|---|---|
Память и Вектор |
|||
#18+
akula84а какое максимальное количество выборки? с точностью до 1000 точно никакого рецепта нет (много от чего зависит) екскрементируйте :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2004, 14:18
|
|||
---|---|---|---|
Память и Вектор |
|||
#18+
INSERT INTO <name_table> SELECT * FROM <name_table>; Вы можете использовать команду INSERT чтобы получать или выбирать значения из одной таблицы и помещать их в другую, чтобы использовать их вместе с запросом. Чтобы сделать это, вы просто заменяете предложение VALUES на соответствующий запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2004, 14:41
|
|||
---|---|---|---|
Память и Вектор |
|||
#18+
akula84смысл такой: есть документы с различными статусами. Хочется сразу показать документы с одним статусом, а их там 100 000. Конечно можно сделать фильтр по клиенту и дате... То есть отображать такие большие выборки не рекомендуется? Можно но во первых нет необходимости перекачивать все это в вектор, а работать с результатом запроса, это раз. Во вторых и это еще не единственный вариант. Вам уже объясняли о использовании модели данных для построетия таблиц просмотра. Можно обращаться с запросом к базе за каждой строкой или брать порциями. В модели для JTable опишите AbstractTableModel в этом классе организуйте стек, размером раза в два превышающий вывод на экран. Стек пополняйте запросами к базе в зависимости от обращения к public Object getValueAt. Результат - нет необходимости у клиента держать весь курсор, следовательно возможен просмотр данных любого объема. P.S. akula84 В таблицу данные положить Таблицы бывают на экрате и в базе. Задовайте вопросы по точнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2004, 17:58
|
|||
---|---|---|---|
Память и Вектор |
|||
#18+
java -Xmx1024M yourprogramclassname при этом не забудьте естессно поставить в комп 1.5 Гб Рама 2. используйте java.util.ArrayList() заместо java.util.Vector() если только 2 пользователя в одно и тоже время не будут делать эту операцию zy ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.09.2004, 11:25
|
|||
---|---|---|---|
|
|||
Память и Вектор |
|||
#18+
рубльВам уже объясняли о использовании модели данных для построетия таблиц просмотра. Можно обращаться с запросом к базе за каждой строкой или брать порциями. В модели для JTable опишите AbstractTableModel в этом классе организуйте стек, размером раза в два превышающий вывод на экран. Стек пополняйте запросами к базе в зависимости от обращения к public Object getValueAt. Результат - нет необходимости у клиента держать весь курсор, следовательно возможен просмотр данных любого объема. А если будет так, то получается, что данные будут изменяться, если только клиент будет выбирать мышкой запись, а если он хочет просто пойти по полям полосой прокрутки? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.09.2004, 16:53
|
|||
---|---|---|---|
|
|||
Память и Вектор |
|||
#18+
ResultSet решение не окончательное. Есть такая штука RowSet : http://java.sun.com/developer/technicalArticles/javaserverpages/cachedrowset/ Есть и реализация Oracle можете найти на OTN Вообще решение таких задач, это нетривиальный вопрос. В качестве альтернативы можно использовать EJB. Я лично пытаюсь написать свою собственную реализацию RowSet. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.09.2004, 09:05
|
|||
---|---|---|---|
Память и Вектор |
|||
#18+
akula84А если будет так, то получается, что данные будут изменяться, если только клиент будет выбирать мышкой запись, а если он хочет просто пойти по полям полосой прокрутки? Код: plaintext 1. 2. 3. 4.
JTable обращается к методу getValueAt только тогда когда значение нужно вывести на экран. Если буфере, созданным вами, значение отсутствует обращайтесь к базе с запросом -> помещайте занные в очередь, вытесняя имеющиеся. Смысл в том, чтобы у клиента был всегда фиксированный буфер данных, пополняемый в зависимости от запросов JTable к методам AbstractTableModel. При скролинге полосой прокрутки вызываются теже методы что и при движении курсором по строкам JTable, в конечном итоге. Дело только в том, что вернет getRowCount, от этого и будет "движок" скролинга зависеть. В данном случае должно возвращаться реальное кол. записей в таблице базы данных, а не буфера описанного в AbstractTableModel. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
18.09.2004, 19:03
|
|||
---|---|---|---|
Память и Вектор |
|||
#18+
Существует очень малый круг задач для который нужно ОДНОВРЕМЕННО использовать большое количество оперативной памяти. Если ты решил публиковать 100 000 строк то незачем их буферизировать в памяти целиком. Кроме того производственные задачи имеют тенденцию распухать в размерах и тот код что вчера работал более или менее успешно завтра уже может не уложится в ОП. Используй возможности твоей БД. Перенеси большую часть логики на SQL запрос. Создай глобальный курсор для твоего запроса и выводи данные порциями. Такой подход работает всегда и везде. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=59&tablet=1&tid=2153719]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 312ms |
total: | 478ms |
0 / 0 |