hibernate c3p0 ThreadPoolExecutor Пул соединений, я делаю это правильно? - PullRequest
4 голосов
/ 01 марта 2012

Я использую hibernate и c3p0 для базы данных, и у меня есть Java-приложение с ThreadPoolExecutor.То, что я делаю, я задаю различные задачи, каждая из которых связана с hibernate, для хранения данных в Hibernate с использованием транзакций и getCurrentSession.Таким образом, у меня есть

new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.MINUTES,taskQueue);

Runnable
{
 @Override
 public void run() {
    Session session = HibernateDAO.getInstance().getCurrentSession();
    Transaction tx = null;  
    try
{tx = session.beginTransaction(); .....
}     

И поток hibernate.cfg org.hibernate.connection.C3P0ConnectionProvider 1

        <!-- Database c3p0 settings -->
        <property name="hibernate.c3p0.min_size">3</property>
        <property name="hibernate.c3p0.max_size">3</property>
        <property name="hibernate.c3p0.initialPoolSize">3</property>
        <property name="hibernate.c3p0.max_statements">100</property>
        <property name="hibernate.c3p0.timeout">5000</property>
        <property name="hibernate.c3p0.acquire_increment">2</property>

Моя цель - получить для каждого потока от исполнителя, чтобы получить соединение, используяgetCurrentSession и выполните session.saveOrUpdate (item), теперь у меня есть пара вопросов.Какой уровень изоляции я должен использовать, потому что у меня 95% операций записи / обновления и 5% операций чтения и чтения не прерываются операциями записи.Я получаю в журнале HTML от log4j

905     pool-1-thread-1     DEBUG   com.mchange.v2.resourcepool.BasicResourcePool   trace com.mchange.v2.resourcepool.BasicResourcePool@434cb775 [managed: 3, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@697506e6)
905     pool-1-thread-5     DEBUG   com.mchange.v2.resourcepool.BasicResourcePool   trace com.mchange.v2.resourcepool.BasicResourcePool@434cb775 [managed: 3, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@697506e6)
965     pool-1-thread-4     DEBUG   com.mchange.v2.resourcepool.BasicResourcePool   trace com.mchange.v2.resourcepool.BasicResourcePool@434cb775 [managed: 3, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@697506e6)

Означает ли это, что у меня есть только 1 соединение в c3p0 или несколько соединений в одном пуле?

Я использую это как следуетUSED ​​????

какой уровень изоляции будет наилучшим для одновременных записей?

Заранее спасибо всем, если кому-то нужны дополнительные данные и объяснения, просто нажмите.

- РЕДАКТИРОВАТЬ: ответил

Как подсказано в ответе, я проверил администратора сервера mysql, и есть больше соединений, которые используются для запроса ... так что это правильный путьиспользуйте это: D ... Что касается уровней изоляции, я постараюсь позволить

1 Ответ

1 голос
/ 01 марта 2012

Это означает, что у вас есть один пул с 3 начальными подключениями.Вы сможете убедиться в этом, посмотрев на свой монитор SQL-сервера.

Помните, что конфигурация вашего SQL-сервера превосходит C3PO, поэтому, если у вас несколько потоков, конкурирующих за транзакции в одной таблице, вы можете найти свои операции записи / обновлениязаблокирован независимо от конфигурации вашего пула.

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

Что касается указания уровня изоляции, я понимаю, что это больше вопрос производительности read , чем для записи.Я никогда не оказывался в ситуации, когда мне хотелось бы чего-то меньшего, чем READ COMMITTED, поскольку разрешение «грязного» чтения с READ UNCOMMITTED полностью сводит на нет преимущества использования базы данных ACID.Однако я не эксперт в этой области, у кого-то еще может быть другое мнение.Если это действительно вас беспокоит, я бы сравнил обе настройки с базой данных по вашему выбору, чтобы определить, насколько можно повысить производительность, если таковая имеется.

...