Использование EhCache для session.createCriteria (...). List () - PullRequest
0 голосов
/ 12 июня 2010

Я оцениваю прирост производительности от использования кэша 2-го уровня в Hibernate (с включенным EhCache), но, похоже, он не повышает производительность На самом деле время выполнения запроса немного увеличивается.

Запрос:

session.createCriteria(MyEntity.class).list();

Сущность:

@Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class MyEntity {
    @Id
    @GeneratedValue
    private long id;

    @Column(length=5000)
    private String data;

    //---SNIP getters and setters---
}

Мой файл hibernate.cfg.xml:

<!-- all the normal stuff to get it to connect & map the entities plus:-->
<property name="hibernate.cache.region.factory_class">
    net.sf.ehcache.hibernate.EhCacheRegionFactory
</property>

Таблица MyEntity содержит около 2000 строк.

Проблема заключается в том, что перед добавлением в кеш запрос, приведенный выше, для перечисления всех сущностей занимал в среднем 65 мс. После кеша они занимают в среднем 74 мс. Я что-то упускаю? Нужно ли что-то сделать, чтобы повысить производительность?

1 Ответ

0 голосов
/ 12 июня 2010

По умолчанию результаты запросов не кэшируются, кэшируются только сущности. Таким образом, каждый раз, когда вы запускаете ваш запрос, SQL все еще выпускается, который возвращает идентификаторы сущностей, соответствующих запросу. Эти объекты затем извлекаются из кэша (если есть).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...