所以,这是交易。
我正在开发一个Android应用程序(尽管它也可以是任何其他移动平台),该应用程序偶尔会向服务器发送查询(该服务器是用Java编写的)。然后,该服务器将在MySQL数据库中搜索查询,并将结果发送回Android。虽然听起来相当通用,但以下是一些具体内容:
1.每次查询时,Android都会与服务器建立新的TCP连接。服务器地理位置接近,Android可能会频繁移动,而且由于Android应用程序可能运行数小时,而只发送少量查询,因此这似乎是最好的资源利用方式。
2.服务器可能同时拥有数百个(甚至可能是数千个)这些查询。
3.由于每个查询都在其自己的线程中运行,因此每个查询至少需要自己的语句(并且可能具有自己的连接)。
现在,服务器已设置为对数据库进行一次连接,然后为每个查询创建一个新的语句。我的问题是针对那些具有一些数据库经验(特别是MySQL,因为它是MySQL数据库)的人:
a)从单个连接为每个线程创建一个语句是否线程安全?据我所知,这是线程安全的,只是寻找确认。
b)有没有线程安全的方法让多个线程使用单个PreparedStatement?这些查询几乎全部相同,由于每个线程仅执行一个查询,然后返回,因此这将是理想的。
c)我应该为每个线程创建一个新连接,还是最好从单个连接生成新语句?我认为单个连接在性能方面更好,但我不知道建立DB连接的开销是多少。
d)使用存储的SQL过程是否最佳?
非常感谢您在这些问题上的经验中提供的任何提示/评论/建议。
编辑:
请澄清一下,Android通过网络向服务器发送查询,然后服务器查询数据库。 Android不直接与数据库通信。 我主要想知道这里的服务器-数据库连接的最佳实践。
1.每次查询时,Android都会与服务器建立新的TCP连接。服务器地理位置接近,Android可能会频繁移动,而且由于Android应用程序可能运行数小时,而只发送少量查询,因此这似乎是最好的资源利用方式。
2.服务器可能同时拥有数百个(甚至可能是数千个)这些查询。
3.由于每个查询都在其自己的线程中运行,因此每个查询至少需要自己的语句(并且可能具有自己的连接)。
现在,服务器已设置为对数据库进行一次连接,然后为每个查询创建一个新的语句。我的问题是针对那些具有一些数据库经验(特别是MySQL,因为它是MySQL数据库)的人:
a)从单个连接为每个线程创建一个语句是否线程安全?据我所知,这是线程安全的,只是寻找确认。
b)有没有线程安全的方法让多个线程使用单个PreparedStatement?这些查询几乎全部相同,由于每个线程仅执行一个查询,然后返回,因此这将是理想的。
c)我应该为每个线程创建一个新连接,还是最好从单个连接生成新语句?我认为单个连接在性能方面更好,但我不知道建立DB连接的开销是多少。
d)使用存储的SQL过程是否最佳?
非常感谢您在这些问题上的经验中提供的任何提示/评论/建议。
编辑:
请澄清一下,Android通过网络向服务器发送查询,然后服务器查询数据库。 Android不直接与数据库通信。 我主要想知道这里的服务器-数据库连接的最佳实践。