在TCP应用程序中处理DB调用的正确方法

时间:2015-03-25 09:57:07

标签: java mysql database

我目前正在开发电话应用程序,为了便于携带,我正在使用Unity3D。该应用程序的设计看起来很漂亮,并且可以很好地扩展到我的所有目标分辨率,但网络给我一个问题。

我使用Java作为服务器后端,并且我使用JDBC来管理数据库连接。问题是这个应用程序肯定至少有几千个用户(基于我目前的关注,博客和营销技术),我想确保我正确地做到这一点,以避免任何锁定SQL正在同时使用。

此应用程序从数据库中提取所需的所有内容。出于安全和故障预防的原因,如果无法连接数据库,则服务器会让客户端(应用程序)知道存在错误。

以下是我担心的事情:当用户登录时,几乎可以立即完成。检查数据库的登录凭据,如果成功,则客户端然后加载应用程序的下一个阶段,然后将数据包发送到服务器。然后,服务器从服务器获取更多信息(这是通过我可能提出的最短形式的总共三个查询来完成的。)但是;如果2-300人登录会发生什么,3-400人正在使用令牌(需要db调用),而2-300人正在其他地方请求数据库数据。那是大约1,000个请求的数据库调用。

我不希望应用程序显得非常滞后。

这是我经过一些研究后目前处理它的方式,但它并不一定是正确的。寻求建议和更正。 (当接收到标题id为X的数据包时,将调用decodeTCP。)

public void decodeTcp(Session session) throws IOException {
    try {
        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
        ScheduledFuture<?> scheduledFuture = scheduledExecutorService.schedule(new Callable<Object>() {
            public Object call() throws Exception {
                return Database.getSingleton().fetch((User)session.getAttachment());
            }
        }, 0, TimeUnit.SECONDS);

        int results = (int) scheduledFuture.get();scheduledFuture.get());
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    }
}

Database#fetch(Object)返回int的位置。

0 个答案:

没有答案