Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Java Базы данных (JDBC, JPA, Hibernate)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2010, 10:10   #1
ganibal110
Новичок
Джуниор
 
Регистрация: 09.11.2010
Сообщений: 2
По умолчанию Hibernate+EHCache=Тест скорости

Доброго времени суток!
Хочу проверить как работает EHCache и для этого создал проект Hibernate с одной таблицей, в которой 5000 записей. Вроде в настройках Hibernate все прописал и разрешил кэш второго уровня (кстати что с ним по умолчанию?), и указал кэш-провайдера. В маппинге класса указал стратегию кэширования (read-only). При выполнении проекта в логе видно что идет занесение в кэш.
Собственно, как можно проверить на сколько увеличилась скорость выполнения с включением EHCache? Пробовал тот же самый проект без EHCache... он работает быстрее.. Может у кого есть небольшой проект с EHCache чтоб можно было с ним поиграть и понять как он работает?
Вот используемые мной файлы:

HibernateUtil.java
Код:
package auto.utils;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    private static final SessionFactory sessionFactory;
    static {
        try {
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}
hibernate.cfg.xml
Код:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>

      <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/test</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>

      <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
      <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>
      <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>
      <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <property name="secondLevelCacheEnabled">true</property>
        <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
        <property name="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</property>
        <property name="hibernate.cache.use_query_cache">true</property>
        <property name="hibernate.generate_statistics">true</property>


      <!-- Mapping files -->
        <mapping resource="auto/entity/Auto.hbm.xml"/>

    </session-factory>
</hibernate-configuration>
ganibal110 вне форума Ответить с цитированием
Старый 09.11.2010, 10:10   #2
ganibal110
Новичок
Джуниор
 
Регистрация: 09.11.2010
Сообщений: 2
По умолчанию Hibernate+EHCache=Тест скорости 2

Auto.java
Код:
package auto.entity;

public class Auto {

    private Long autoId;
    private String autoName;
    private String autoYear;
    private String autoProbeg;

    public Long getAutoId() {
        return autoId;
    }

    public void setAutoId(Long autoId) {
        this.autoId = autoId;
    }

    public String getAutoName() {
        return autoName;
    }

    public void setAutoName(String autoName) {
        this.autoName = autoName;
    }

    public String getAutoYear() {
        return autoYear;
    }

    public void setAutoYear(String autoYear) {
        this.autoYear = autoYear;
    }

    public String getAutoProbeg(){
        return autoProbeg;
    }

    public void setAutoProbeg(String autoProbeg){
        this.autoProbeg = autoProbeg;
    }
}
Auto.hbm.xml
Код:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="auto.entity">
    <class name="Auto" table="auto">
        <cache usage="read-only"/>
        <id  name="autoId" column="auto_id">
            <generator class="native"/>
        </id>
        <property name="autoName" column="auto_name"/>
        <property name="autoYear" column="auto_year"/>
        <property name="autoProbeg" column="auto_probeg"/>
    </class>
</hibernate-mapping>
ehcache.xml
Код:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
	<diskStore path="java.io.tmpdir"/>
	<defaultCache
	    maxElementsInMemory="10"
	    eternal="false"
	    timeToIdleSeconds="1200"
	    timeToLiveSeconds="1200"
	    overflowToDisk="true"
	    diskPersistent="false"
	    diskExpiryThreadIntervalSeconds="120"
	    memoryStoreEvictionPolicy="LRU"/>

	<cache name="auto.entity.Auto"
	    maxElementsInMemory="50000"
	    eternal="false"
	    timeToIdleSeconds="1200"
	    timeToLiveSeconds="1200"
	    overflowToDisk="true"/>
</ehcache>
main.java
Код:
package auto;

import auto.entity.Auto;
import org.hibernate.Session;
import auto.utils.HibernateUtil;
import java.util.List;
import java.util.Iterator;

public class Main {

    //Добавление записи в таблицу Auto
    private void addAuto(String name, String year, String probeg){
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Auto auto = new Auto();
        auto.setAutoName(name);
        auto.setAutoYear(year);
        auto.setAutoProbeg(probeg);
        session.save(auto);
        session.getTransaction().commit();
    }

    //Получение списка всех auto
    private static List<Auto> listAuto1() {
        //Long Ntime = System.currentTimeMillis();
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        //SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        session.beginTransaction();
        List<Auto> autos = session.createQuery("from Auto").setMaxResults(10001).list();
        session.close();
        return autos;
    }

    //Удаление одной записи auto
    private void deleteAuto(Object auto) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        session.delete(auto);
        session.flush();
        session.getTransaction().commit();
    }

    public static void main(String args[])
    {
        Main main = new Main();
        
        List<Auto> autos = listAuto1();
        Iterator<Auto> iterator = autos.iterator();
        while (iterator.hasNext()) {
            Auto auto = (Auto) iterator.next();
            String str = "Машинка № " +auto.getAutoName()+". Пробег "+auto.getAutoProbeg();
        }
    }
}
и кусочек лога
Код:
DEBUG 2010-11-09 10:23:54,208 [TwoPhaseLoad] - resolving associations for [auto.entity.Auto#484]
DEBUG 2010-11-09 10:23:54,208 [TwoPhaseLoad] - adding entity to second-level cache: [auto.entity.Auto#484]
DEBUG 2010-11-09 10:23:54,208 [ReadOnlyCache] - Caching: auto.entity.Auto#484
DEBUG 2010-11-09 10:23:54,208 [TwoPhaseLoad] - done materializing entity [auto.entity.Auto#484]
Я так понимаю кэш заполняется при первом обращении к БД, а при последующий уже из него берутся данные. Как реализовать неоднократное получение данных (сначала из БД, затем из кэша), чтобы можно было засечь время и увидеть результат?
Всем заранее спасибо за ответы!
ganibal110 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тест скорости инета и вывод скрипта bionicle12 PHP 6 06.09.2010 10:28
java:hibernate + spring Jakethefish Java Базы данных (JDBC, JPA, Hibernate) 0 08.06.2010 12:55
Как связать tomcat, hibernate, oracle, jsp qdf1 Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 0 18.05.2010 20:11
Hibernate criteria и джоин balboa Java Базы данных (JDBC, JPA, Hibernate) 0 20.01.2010 12:45
org.hibernate.exception.SQLGrammarE xception: could not insert... BopoHDark Java Базы данных (JDBC, JPA, Hibernate) 4 13.12.2009 15:29