Что касается спящего режима кэширования - PullRequest
1 голос
/ 11 мая 2011

Вот сценарий:

Я выберу некоторые записи из моей базы данных, скажем, 1000 записей. Затем я выполню некоторые операции с этим набором результатов, например вставлю в него еще одну запись или обновлю существующую запись.

Весь вышеупомянутый процесс будет повторяться несколько раз, скажем, 2000 раз. (то есть я снова выберу некоторые записи, но они не обязательно должны быть одинаковыми каждый раз)

Я уверен, что могу использовать какое-то кэширование для повышения производительности. Но я не знаю как. Кто-нибудь может направить меня?

Ответы [ 3 ]

4 голосов
/ 11 мая 2011

Когда вы используете Hibernate, вы на самом деле используете два кэша.Первый - это кеш сессии.Допустим, вы запрашиваете 2000 записей, обновляете и сохраняете изменения до 5, а затем снова запускаете тот же запрос (все в рамках одного сеанса).Hibernate на самом деле не будет выполнять запрос второй раз - он знает, что у вас есть 2000 записей (и 5 изменений), уже загруженных в память.Этот кеш включается автоматически - его нельзя отключить, так как он является частью основных функций Hibernate.Вам нужно закрыть (или хотя бы сбросить) сеанс, чтобы убедиться, что изменения применены - вы просто не хотите открывать один гигантский сеанс и продолжать что-то менять, или в итоге у вас закончится память.

Кэш второго уровня в основном помещает хранилище значений ключей между вашим приложением и базой данных.Этот кэш, как правило, более долговечен, и его могут использовать несколько сеансов, но он также более сложный (например, необходимо правильно обрабатывать потоки, аннулирование и т. Д.).Самая большая проблема заключается в том, что если ваши данные сильно меняются, вам действительно нужно вносить изменения как в кэш второго уровня, так и в базу данных, что может быть медленнее, чем просто вносить изменения напрямую.Однако кэш второго уровня отлично подходит для данных только для чтения.

Настройка Hibernate, и кеши могут быть довольно сложными и сложными.Я настоятельно рекомендую использовать такой инструмент, как p6spy, чтобы увидеть трафик базы данных между вашим приложением и базой данных.

2 голосов
/ 11 мая 2011

Вы можете использовать Hibernate кэш второго уровня. Вот хороший учебник,

http://www.javalobby.org/java/forums/t48846.html

0 голосов
/ 11 мая 2011
<?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>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/empi</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">admin</property>
<!--         <property name="show_sql">true</property>  -->
    <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>
        <mapping resource="com/mycomp/myproj/pkg/Patient.hbm.xml"/>
        <mapping resource="com/mycomp/myproj/pkg/Xref.hbm.xml"/>
        <mapping resource="com/mycomp/myproj/myprojHibernateConfig/myprojPatient.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...