Итак, вот сделка.
Я разрабатываю приложение для Android (хотя это может быть и любая другая мобильная платформа), которое иногда отправляет запросы на сервер (который написан на Java). Затем этот сервер будет искать запрос в базе данных MySQL и отправлять результаты обратно в Android. Хотя это звучит довольно обобщенно, вот некоторые особенности:
Android будет устанавливать новое TCP-соединение с сервером при каждом запросе. Сервер находится географически близко, Android потенциально может много перемещаться, и, поскольку приложение Android может работать часами, отправляя только несколько запросов, это казалось наилучшим использованием ресурсов.
Сервер может потенциально иметь сотни (или, возможно, даже тысячи) этих запросов одновременно.
Поскольку каждый запрос выполняется в своем собственном потоке, каждому запросу по крайней мере понадобится свой собственный оператор (и он может иметь свое собственное соединение).
В данный момент сервер настроен на одно Соединение с базой данных, а затем создает новый оператор для каждого запроса. Мои вопросы для тех из вас, кто имеет некоторый опыт работы с базами данных (в частности, MySQL, поскольку это база данных MySQL):
a) Безопасно ли создавать потоки для одного оператора на поток из одного соединения? Насколько я понимаю, просто ищу подтверждение.
б) Есть ли какой-нибудь потокобезопасный способ для нескольких потоков использовать один PreparedStatement? Все эти запросы будут в значительной степени идентичны, и, поскольку каждый поток выполнит только один запрос и затем вернется, это было бы идеально.
в) Должен ли я создавать новое соединение для каждого потока или лучше создавать новые операторы из одного соединения? Я думаю, что одно Соединение было бы лучше с точки зрения производительности, но я понятия не имею, каковы издержки для установления Соединения с БД.
d) Лучше ли использовать хранимые процедуры SQL для всего этого?
Будем весьма благодарны за любые подсказки / комментарии / предложения из вашего опыта в этих вопросах.
EDIT:
Просто чтобы уточнить, андроид отправляет запросы по сети на сервер, который затем запрашивает базу данных. Андроид напрямую не связывается с базой данных. В основном меня интересуют передовые практики для соединения сервера с базой данных.