powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
25 сообщений из 43, страница 1 из 2
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37651812
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!

К примеру, во вьюшке 60076 записей; чтобы заполнить комбобокс, как показано на рисунке в конце поста- требуется порядка ~5..6 минут, что, как мне кажется, не допустимо долго. Возможно, есть способ ускорить выборку? Буду весьма признателен за информацию.

Код: java
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.
...
    private class OrganizationsHandbookBinder {
    	OrganizationsHandbookBinder() {
    		sess = HibernateUtil.getMarksistSessionFactory().openSession();
    		sess.beginTransaction();
    		
    		OrganizationsHandbookList = (List)sess.createCriteria(OrganizationsHandbook.class).list();
    	    
    		//sess.getTransaction().commit();
    	    sess.close();
    	}
    }

...

   organizationsHandbookBinder = new OrganizationsHandbookBinder();
...

            for(Object organizationsHandbook : OrganizationsHandbookList) {
            	companies.addItem(((OrganizationsHandbook)organizationsHandbook).getOrgId() + " : " +
            			((OrganizationsHandbook)organizationsHandbook).getShortname());
            }
            companies.setFilteringMode(Filtering.FILTERINGMODE_STARTSWITH);        
            companies.setImmediate(true);        
            companies.setNullSelectionAllowed(false);



Собственно, сам класс OrganizationsHandbook -

Код: java
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.
...
@Entity
@Table(name = "MARKSIST.NSI_ORG_ALL")
public class OrganizationsHandbook {
	@Id	
	@Column(name = "ORG_ID")
	private Integer orgId;
	@Column(name = "OKPO")
	private String okpo;
	@Column(name = "SHORTNAME")
	private String shortname;
	@Column(name = "RECDATEBEGIN")
	private String recdatebegin;
	@Column(name = "RECDATEEND")
	private String recdateend;
	/**
	 * @return
	 */
	public Integer getOrgId() {
		return orgId;
	}
	/**
	 * @param orgId 
	 */
	public void setOrgId(Integer orgId) {
		this.orgId = orgId;
	}
	/**
	 * @param okpo
	 */
	public void setOkpo(String okpo) {
		this.okpo = okpo;
	}
	/**
	 * @return 
	 */
	public String getOkpo() {
		return okpo;
	}
	/**
	 * @param recdatebegin
	 */
	public void setRecdatebegin(String recdatebegin) {
		this.recdatebegin = recdatebegin;
	}
	/**
	 * @return
	 */
	public String getRecdatebegin() {
		return recdatebegin;
	}
	/**
	 * @param shortname
	 */
	public void setShortname(String shortname) {
		this.shortname = shortname;
	}
	/**
	 * @return
	 */
	public String getShortname() {
		return shortname;
	}
	/**
	 * @param recdateend
	 */
	public void setRecdateend(String recdateend) {
		this.recdateend = recdateend;
	}
	/**
	 * @return
	 */
	public String getRecdateend() {
		return recdateend;
	}
}
...



Файл конфигурации -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC 
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
	
<hibernate-configuration>    
   <session-factory name="hibernateSessionFactory">
	  <property name="current_session_context_class">thread</property>  
	  
      <property name="connection.datasource">java:/comp/env/jdbc/oracle-9i-athletes</property>          
      <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
      
      <property name="format_sql">true</property>  
      <property name="show_sql">true</property>
   </session-factory> 
</hibernate-configuration>
...



HibernateUtil -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
...

public class HibernateUtil {	
    private static final SessionFactory marksistSessionFactory;
    static {    	
    	try {
    		/////////////////////// MARKSIST ANNOTATED CLASSES ///////////////////////
    		
    		AnnotationConfiguration marksistAnnotationConfiguration = new AnnotationConfiguration();
    		marksistAnnotationConfiguration.addAnnotatedClass(com.intellex.marksist.application.BusFunction.class);
    		marksistAnnotationConfiguration.addAnnotatedClass(com.intellex.marksist.hbn.model.OrganizationsHandbook.class);
    		Configuration marksistConfiguration = marksistAnnotationConfiguration.configure("marksist.hibernate.cfg.xml");
    		marksistSessionFactory = marksistConfiguration.buildSessionFactory();
      } catch (Throwable ex) {    	  	
        	throw new ExceptionInInitializerError(ex);
      }
    }
    public static SessionFactory getMarksistSessionFactory() {
    	return marksistSessionFactory;
    }
}
...



Глобальный контекст -

Код: xml
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.
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!--Context antiJARLocking="true"
path="/ConnectionPooling">
<!- - set the JNDI Datasource -->


	<Resource name="jdbc/oracle-9i-athletes"
	auth="Container"
	type="javax.sql.DataSource"
	maxActive="10"
	maxIdle="20"
	maxWait="5000"
	username="..."
	password="..."
	driverClassName="oracle.jdbc.OracleDriver" 
	url="jdbc:oracle:thin:@......."/>	


    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->

</Context>
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37651826
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вы себе представляете юзера, который выбирает одну из 60076 записей? Вот так сидит и листает?
Откуда уверенность в том что тормозит именно хибернейт, а не companies.addItem, например? Или вывод контрола на страницу?
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37651840
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, Blazkowicz!

Свойство
Код: java
1.
FILTERINGMODE_STARTSWITH

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

Относительно companies.addItem- интересное замечание. Я подумаю, спасибо.
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37651858
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-voidтребуется порядка ~5..6 минут
чтобы снизить до макс.10 сек - всё равно надо дать юзверю механизм настроечных фильтров с сохранением (индивидуальных).
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37651874
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По аналогии: "пагинацию придумали трусы!"
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37651878
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ivanov-voidтребуется порядка ~5..6 минут
чтобы снизить до макс.10 сек - всё равно надо дать юзверю механизм настроечных фильтров с сохранением (индивидуальных).Ну что ж вы за глупости такие то пишите Какие юзеры? Какие настроечные фильтры? Проблема в том, что пользователю надо давать подсказки по списку имеющихся объектов.
У автора это, разумеется, сделано очень глупо - он зачем то вытаскивает вообще все объекты и вытаскивает их целиком. Вместо этого надо стремиться вытаскивать минимум информации из БД. Например, вытаскивать только имена, которые будут показаны пользователю и ID, которые будут использованы где-то в запросе. Плюс такого варианта - очень быстрый, результаты можно закешировать.
Есть другой вариант - вытаскивать не все объекты, а только те, которые попадают под паттерн, введеный юзверем. Тут кеширование не прокатит (а значит будет страдать БД), зато этот вариант может оказаться подходящим при разрстании таблицы до очень большого кол-ва записей.
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37651889
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckПо аналогии: "пагинацию придумали трусы!"
пагинация <> фильтру.
Неужели не в курсе?
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37651893
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,
хотя, если ты про дополнительно, как вариант, то ... извини :)
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37651898
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо инструменты получше изучать. В том же Vaadin есть концепция - Container: https://vaadin.com/api/com/vaadin/data/Container.html
по логике она должна уметь делать ленивую загрузку, чтобы не грузить юзеру 60К записией, которые ему триста лет не нужны.
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37651900
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomУ автора это, разумеется, сделано очень глупо
svenom,
чёто у тебя слово "глупо" - слишком часто. Даже вникать в пост лень.
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37651924
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую всех!

...
механизм настроечных фильтров с сохранением (индивидуальных).

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

вытаскивать не все объекты, а только те, которые попадают под паттерн, введеный юзверем

концепция - Container: https://vaadin.com/api/com/vaadin/data/Container.html
...


Клево, благодарю за помощь.
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37652091
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123пагинация <> фильтру.
Неужели не в курсе?
Шутник! Не в 1 классе!
Просто фильтр может выдать тоже слишком много записей.
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37652194
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На моем (довольно старом) ноуте вычитывание такой таблицы из БД занимает пару секунд.
5-6 минут - это на нагруженной базе или нет? Если на нагруженной, то сколько времени занимает вычитывание таблицы через jdbc или через консольный клиент (в последнем случае перенаправьте вывод результатов в nul, так как терминал тормозит))?
Я был бы очень благодарен за ответ.


Если по существу, то нужен fuzzy search. У вас какая СУБД?
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37652203
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪНа моем (довольно старом) ноуте вычитывание такой таблицы из БД занимает пару секунд.
5-6 минут - это на нагруженной базе или нет? Если на нагруженной, то сколько времени занимает вычитывание таблицы через jdbc или через консольный клиент (в последнем случае перенаправьте вывод результатов в nul, так как терминал тормозит))?
Я был бы очень благодарен за ответ.
Если по существу, то нужен fuzzy search. У вас какая СУБД?
Да что вы на базу смотрите? У автора Vaadin тормозтит.
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37652224
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У автора Vaadin тормозтит.
А что он там делает по 5 минут?
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37652233
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪУ автора Vaadin тормозтит.
А что он там делает по 5 минут?
60т. раздели на время - не так и много
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37652248
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪЕсли по существу, то нужен fuzzy search. У вас какая СУБД?Нет тут никакого fuzzy, здесь нужен точный матчч заданому паттерну.
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37652251
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪА что он там делает по 5 минут?

http://dev.vaadin.com/browser/svn/versions/6.7/src/com/vaadin/ui/AbstractSelect.java

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
  public Object addItem() throws UnsupportedOperationException {

	        final Object retval = items.addItem();
	        if (retval != null
	                && !(items instanceof Container.ItemSetChangeNotifier)) {
	           fireItemSetChange();//!!!
	        }
	        return retval;
	    }



и так 60000+ раз
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37652252
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczи так 60000+ раз
Да ещё на JavaScript
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37652257
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomНет тут никакого fuzzy, здесь нужен точный матчч заданому паттерну.
И ленивая загрузка.
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37652307
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, все верно.
Вспомнил свои посты на этот счет как раз - 1, 2, из этого синтезирую решение.
Всем еще раз спасибо за информацию.
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37652452
organism
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-void,
Посмотрите в сторону: Hibernate Container
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37652486
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую Vaadin и Hibernate, тот же выпадающий список но всего 10т.р. записей, вроде не тормозит - подгружается при необходимости. Та же ситуация с таблицами.
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37652528
Dflz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не могу понять для чего надо юзеру эти тысячи значений?
я использую оперратор like (mssql, mysql) для вывода отфильтрованных значений при вводе символов. и вывожу юзеру не больше 10 строк, как результат выбор нужного из 700 000 значений - юзером 3-9 сек (это с учетом реакции юзера, нажатие на кнопки)
если следовать вашими методами - это передача юзеру огромниго , не нужного ему количества информации, куча потраченного в пустую времени не заполнение комбо.
а если это jsp страница, то ....
почему не используются вебсервисы? ведь всё просто.
...
Рейтинг: 0 / 0
Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
    #37652612
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dflzя использую оперратор like (mssql, mysql) для вывода отфильтрованных значений при вводе символов.
В Vaadin'е в этом КомбоБоксе точно также все происходит, можно лениво прогружать все десятки тысяч записей, прокручивая список, а можно набирать начальные буквы и значения списка будут отфильтровываться по введенным символам.
Скорее всего автор, либо что-то отключил, потому что по-умолчанию всегда все лениво прогружается. (сомниваюсь что сейчас прав буду - не присвоил .setImmediate(true) переменной комбобокса).
Но еще более вероятно, что у него здоровенный ентити-файл, с кучей связей, которые НЕ Lazy. Из за этого имея даже 10 объектов можно получить хорошие такие тормоза :)
В конце концов надо бы трейс посмотреть, если там тысячами прут селекты гибернейта, то предыдущее предложение точно верно.
Ну и самое невероятное, версия Vaadin'a какая-то кривая - тогда надо ее сменить, естественно.
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate :выборка 60076 записей в представленной конфигураци занимает значительное время
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]