2013-09-14 3 views
1

У меня есть сервлет Java (работает в Tomcat), который извлекает данные из базы данных SQLite. Я использую драйвер Xerial для доступа к базе данных SQLite из своего сервлета.Оптимизация Java и SQLite

Этот сервлет извлекает данные, когда мобильные приложения запрашивают информацию.

Эта база данных используется только как доступная только для чтения (она создается один раз в день), но содержит огромные данные (основная таблица содержит 200 000 строк, а другая - более 10 000 000 строк). Я создал индексы для столбцов, которые часто используются.

Мне нужны советы для оптимизации использования базы данных SQLite, чтобы повысить отзывчивость моего сервера.

  1. Для каждого запроса я создаю новое соединение с базой данных, затем отправляю SQL-выбор, извлекаю данные и закрываю соединение. Это хорошая стратегия? У меня может быть много запросов, работающих параллельно. Должен ли я использовать пул соединений? как?

  2. Файл базы данных SQLite составляет около 2 ГБ, на моем сервере у меня много памяти (16 ГБ). Поскольку это база данных только для чтения, я могу загрузить ее в память или увеличить кеш. Какова лучшая стратегия и как это сделать?

ответ

0

Я так как будет много параллельного запроса, открытие соединения, выполнение операции и последующее закрытие соединения для каждого запроса вызовет узкое место производительности. Операции ввода-вывода очень трудоемки. Я думаю, вы должны использовать Connection Pool. Подробности есть в Java документации

http://docs.oracle.com/cd/E11882_01/java.112/e12265/manage.htm

Как это только для чтения файла, который вы можете использовать многопоточность без накладных расходов синхронизации для повышения производительности.

Говоря о кеше, существуют методы обеспечения того, чтобы часто используемые данные находились в кеше. Я не уверен, что у вас может быть 2 ГБ кеша. Загрузите файл в память и увеличьте локальность данных. Вы можете использовать методы «Cache Blocking» и «Loop tiling», которые используются для увеличения местоположения данных.

0

Использование пула соединения лучше, так как у вас может быть много запросов параллельно.

Смежные вопросы