Hibernate + позволяет SQLite Pragmas набирать скорость на компьютере с Windows 7 - PullRequest
1 голос
/ 30 августа 2011

Используемое программное обеспечение:

  • Спящий 3,6
  • sqlite jbdc 3.6.0
  • java jre 1.6.X

У меня проблема с передачей данных по TCP-соединению (20 000 записей)

  • создать базу данных sqlite с помощью hibernate
  • использовать аннотации hibernateview и hibernate для создания запросов
  • hibernate proberties также используются
  • хранение 20 000 записей в спящем режиме без использования прагм sqlite длится почти 6 минут (~ 330 с) в Windows 7
  • хранение 20 000 записей без спящего режима и всех соответствующих SQL-прагм длится около 2 минут (~ 109 секунд) в Windows 7
  • тесты с Hibernate и SQLite без прагм на Windows XP и Windows Vista работают быстро, но на win7 это длится почти 3 раза (~ 330 сек - победа 7) столько же, сколько на машине с XP
  • на windows 7 мы хотим активировать sqlite pragmas для увеличения скорости
  • соответствующие прагмы:

    PRAGMA cache_size = 400000;
    PRAGMA synchronous = OFF;
    PRAGMA count_changes = OFF;
    PRAGMA temp_store = MEMORY;
    PRAGMA auto_vacuum = NONE;
    

Проблема: мы должны использовать Hibernate (без Nhibernate!)

Вопросы:

  • как включить эти прагмы в hibernate sqlite, если это возможно?
  • Можно ли это сделать с помощью спящего режима?

Ответы [ 3 ]

1 голос
/ 18 ноября 2011

Я также искал способ установить другую прагму: PRAGMA foreign_keys = ON для спящих соединений.Я не нашел ничего по этому вопросу, и единственное решение, которое я придумал, - это декорировать драйвер SQLite JDBC и устанавливать требуемую прагму при каждом получении нового соединения.Смотрите пример кода ниже:

@Override
public Connection connect(String url, Properties info) throws SQLException {
    final Connection connection = originalDriver.connect(url, info);
    initPragmas(connection);
    return connection;
}

private void initPragmas(Connection connection) throws SQLException {
    //Enabling foreign keys
    connection.prepareStatement("PRAGMA foreign_keys = ON;").execute();
}

Полный пример здесь: https://gist.github.com/52dbc7066787684de634. Затем при инициализации свойства hibernate.connection.driver_class просто установите его в свой пакет .DriverDecorator

0 голосов
/ 20 марта 2019

для PRAGMA foreign_keys = ON эквивалент

hibernate.connection.foreign_keys=true

или

<property name="connection.foreign_keys">true</property>

в зависимости от вашей стратегии

0 голосов
/ 30 августа 2011

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

...