Are there any major limitations to scaling with the jdbc call playback and blocking platform?

I use playframework (2.4) for Java and connect it to Postgres. The playback frame is used as a sedative service, and all it does is insert, update, read and delete using JDBC. On this play page, https://www.playframework.com/documentation/2.3.x/JavaAsync it clearly states that JDBC is blocked and there are several threads in the game. For people who know about it as much as possible, and is there a way I can get around this? My particular application can have several hundred database queries per second. I will have all the hardware and additional servers, but I don’t know how the game can handle it or scale it to handle it in code. My code in the game is as follows:

public static Result myprofile() {
        DynamicForm requestData = Form.form().bindFromRequest();
        Integer id = Integer.parseInt(requestData.get("id"));

        try {
            JSONObject jo = null;
            Connection conn = DB.getConnection();
            ResultSet rs;
            JSONArray ja = new JSONArray();
            PreparedStatement ps = conn.prepareStatement("SELECT p.fullname as fullname, s.post as post,to_char(s.created_on, 'MON DD,YYYY') as created_on,s.last_reply as last_reply,s.id as id,s.comments as comments,s.state as state,s.city as city,s.id as id FROM profiles as p INNER JOIN streams as s ON (s.profile_id=p.id) WHERE s.profile_id=? order by created_on desc");
            ps.setInt(1, id);
            rs = ps.executeQuery();

            while (rs.next()) {
                jo = new JSONObject();
                jo.put("fullname", rs.getString("fullname"));
                jo.put("post", rs.getString("post"));
                jo.put("city", rs.getString("city"));
                jo.put("state", rs.getString("state"));
                jo.put("comments", rs.getInt("comments"));
                jo.put("id", rs.getInt("id"));
                jo.put("last_reply", difference(rs.getInt("last_reply"), rs.getString("created_on")));
                ja.put(jo);
            }
            JSONObject mainObj = new JSONObject();
            mainObj.put("myprofile", ja);


            String total = mainObj.toString();
            System.err.println(total);
            conn.close();
            return ok(total);
        } catch (Exception e) {
            e.getMessage();
        }
        return ok();
    }

, , . , , , jdbc? , .

+4
1

.

, - . - , , - .

IO , . , - , . Promise, , concurrency. . https://www.playframework.com/documentation/2.4.x/JavaAsync#Make-controllers-asynchronous

, , . , - , , , , .

, , . , , , :

Play 2 -- HTTP-, (.. ). , Java JDBC, Play 2 Akka . http://www.jamesward.com/2012/06/25/optimizing-play-2-for-database-driven-apps

, , . , , , .

: https://www.playframework.com/documentation/2.4.x/ThreadPools

, Promise, , Play 2.4. https://www.playframework.com/documentation/2.4.x/Migration24#Routing


application.conf "jdbc-execution-context"

//reference to context
ExecutionContext jdbcExecutionContext = Akka.system().dispatchers()
     .lookup("jdbc-execution-context");

return promise(() -> {
    //db call
}, jdbcExecutionContext)
.map(callResult -> ok(callResult));
+3

Source: https://habr.com/ru/post/1608738/


All Articles