关系型数据库·分布式数据库执行性能分析

24 阅读4分钟

**
关系型数据库**

     1:利用****jdbctemplate

          a:execute方法单个执行sql

               

JdbcTemplate jdbc = DBTemplateUtil.getDBTemplate();

for (int i = 0; i < 100000; i++) {

      sb.append("insert into m_test_insert values ('"+i+"','name1_" + i + "','120kg','name2_" + i + "','4','5','6','7'"

           + ",'8','9','10','11','12','13','14','15','16','17','18','19','20')");


      jdbc.execute(sb.toString());

}

//634540

    

          b:batchupdate方法批量执行sql

          

               for (int i = 0; i < 100000; i++) {

                        Object[] obj = new Object[21];

                        obj[0] = i + "";

                        obj[1] = "name1_" + i + "'";

                        obj[2] = "name2_" + i + "'";

                        obj[3] = "3";

                        obj[4] = "3";

                        obj[5] = "3";

                        obj[6] = "3";

                        obj[7] = "3";

                        obj[8] = "3";

                        obj[9] = "3";

                        obj[10] = "3";

                        obj[11] = "3";

                        obj[12] = "3";

                        obj[13] = "3";

                        obj[14] = "14";

                        obj[15] = "3";

                        obj[16] = "3";

                        obj[17] = "3";

                        obj[18] = "3";

                        obj[19] = "3";

                        obj[20] = "3";

                        dataSet.add(obj);

                        if ((i + 1) % 10000 == 0) {

                              jdbc.batchUpdate("insert into m_test_insert values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",dataSet);

                        }

                  }

                  jdbc.batchUpdate("insert into m_test_insert values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",dataSet);

//13000


          c:拼接多values值插入


StringBuilder sb = new StringBuilder("insert into m_test_insert values");

           

          for (int i = 0; i < 100000; i++) {

                  if (i != 0){

                        sb.append(",");

                  }

                  sb.append("('"+i+"','name1_" + i + "','120kg','name2_" + i + "','4','5','6','7'"

                              + ",'8','9','10','11','12','13','14','15','16','17','18','19','20')");

            }

            jdbc.execute(sb.toString());

           //24020


     2:利用statement(关闭事务自动提交)

          a:execute方法单个执行

          

            JdbcTemplate jdbc = DBTemplateUtil.getDBTemplate();

            DataSource ds = jdbc.getDataSource();

            Connection connection = null;

            Statement statement = null;

            long begin = System.currentTimeMillis();

            try {

                  connection = ds.getConnection();

                  connection.setAutoCommit(false);

                  statement = connection.createStatement();

                  for (int i = 0; i < 100000; i++) {

                        String sql = "insert into m_test_insert values('"+i+"','name1_" + i + "','120kg','name2_" + i + "','4','5','6','7'"

                                    + ",'8','9','10','11','12','13','14','15','16','17','18','19','20')";

                        statement.execute(sql);  

                  }

                  connection.commit();

            }

//493602

          b:executeBatch方法


                  for (int i = 0; i < 100000; i++) {

                        String sql = "insert into m_test_insert values('"+i+"','name1_" + i + "','120kg','name2_" + i + "','4','5','6','7'"

                                    + ",'8','9','10','11','12','13','14','15','16','17','18','19','20')";

                        statement.addBatch(sql);

                        if ((i + 1) % 10000 == 0) {

                              statement.executeBatch();

                              statement.clearBatch();

                              connection.commit();

                        }

                  }

                  statement.executeBatch();

                  statement.clearBatch();

                  connection.commit();

//30332

  

          

         c:拼接多values值插入


            StringBuilder sb = new StringBuilder("insert into m_test_insert values");

            for (int i = 0; i < 100000; i++) {

                  if (i != 0){

                        sb.append(",");

                  }

                  sb.append("('"+i+"','name1_" + i + "','120kg','name2_" + i + "','4','5','6','7'"

                              + ",'8','9','10','11','12','13','14','15','16','17','18','19','20')");

            }

            long begin = System.currentTimeMillis();

            Statement statement = connection.createStatement();

            statement.execute(sb.toString());

            connection.commit();

//29647


          d:preparestatement利用executeBatch方法


               for (int i = 0; i < 100000; i++) {

                        statement.setString(1, i + "");

                        statement.setString(2,"name1_" + i + "'");

                        statement.setString(3,"name2_" + i + "'");

                  statement.setString(4,"3");

                  statement.setString(5, "3");

                  statement.setString(6,"3");

                  statement.setString(7,"3");

                  statement.setString(8,"3");

                  statement.setString(9, "3");

                  statement.setString(10,"3");

                  statement.setString(11,"3");

                  statement.setString(12,"3");

                  statement.setString(13, "3");

                  statement.setString(14,"3");

                  statement.setString(15,"3");

                  statement.setString(16,"3");

                  statement.setString(17,"3");

                  statement.setString(18, "3");

                  statement.setString(19,"3");

                  statement.setString(20,"3");

                  statement.setString(21,"3");

                  statement.addBatch();

                        if ((i + 1) % 10000 == 0) {

                              statement.executeBatch();

                              statement.clearBatch();

                              connection.commit();

                        }

                  }

                  statement.executeBatch();

                  statement.clearBatch();

                  connection.commit();

//11909



分布式数据库

     1:利用jdbc方式

a: execute单条执行

            JdbcTemplate hjdbc = PhoenixTemplateUtil.getHBaseTemplate();

            for (int i = 0; i < 10000; i++) {

                  String sql = "upsert into m_test_insert values('"+i+"','name1_" + i + "','120kg','name2_" + i + "','4','5','6','7'"

                              + ",'8','9','10','11','12','13','14','15','16','17','18','19','20')";

                  hjdbc.execute(sql);

            }

//72480

          b:batchUpdate方法

     

          JdbcTemplate hjdbc = PhoenixTemplateUtil.getHBaseTemplate();

            final List<Object[]> dataSet = new ArrayList<>();

            for (int i = 0; i < 10000; i++) {

                  Object[] obj = new Object[21];

                  obj[0] = i + "";

                  obj[1] = "name1_" + i + "'";

                  obj[2] = "name2_" + i + "'";

                  obj[3] = "3";

                  obj[4] = "3";

                  obj[5] = "3";

                  obj[6] = "3";

                  obj[7] = "3";

                  obj[8] = "3";

                  obj[9] = "3";

                  obj[10] = "3";

                  obj[11] = "3";

                  obj[12] = "3";

                  obj[13] = "3";

                  obj[14] = "14";

                  obj[15] = "3";

                  obj[16] = "3";

                  obj[17] = "3";

                  obj[18] = "3";

                  obj[19] = "3";

                  obj[20] = "3";

                  dataSet.add(obj);

            }

            long begin = System.currentTimeMillis();

            hjdbc.batchUpdate("upsert into m_test_insert values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",new BatchPreparedStatementSetter() {


                  @Override

                  public void setValues(PreparedStatement ps, int i) throws SQLException {

                        Object[] obj = dataSet.get(i);

                    try{

                        ps.setString(1, obj[0].toString());

                        ps.setString(2,obj[1].toString());

                        ps.setString(3,obj[2].toString());

                        ps.setString(4,obj[3].toString());

                        ps.setString(5, obj[4].toString());

                        ps.setString(6,obj[5].toString());

                        ps.setString(7,obj[6].toString());

                        ps.setString(8,obj[7].toString());

                        ps.setString(9, obj[8].toString());

                        ps.setString(10,obj[9].toString());

                        ps.setString(11,obj[10].toString());

                        ps.setString(12,obj[11].toString());

                        ps.setString(13, obj[12].toString());

                        ps.setString(14,obj[13].toString());

                        ps.setString(15,obj[14].toString());

                        ps.setString(16,obj[15].toString());

                        ps.setString(17,obj[16].toString());

                        ps.setString(18, obj[17].toString());

                        ps.setString(19,obj[18].toString());

                        ps.setString(20,obj[19].toString());

                        ps.setString(21,obj[20].toString());

                      } catch (Exception e){

                        e.printStackTrace();

                    }

                  }


                  @Override

                  public int getBatchSize() {

                        return dataSet.size();

                  }

            });

//66954


2:statement方式(关闭自动提交事务)

          a:execute直接执行

            Connection connection = ds.getConnection();

            connection.setAutoCommit(false);

            Statement statement = connection.createStatement();

            long begin = System.currentTimeMillis();

            for (int i = 0; i < 10000; i++) {

                  String sql = "upsert into m_test_insert values('"+i+"','name1_" + i + "','120kg','name2_" + i + "','4','5','6','7'"

                              + ",'8','9','10','11','12','13','14','15','16','17','18','19','20')";

                 

                  try {

                        statement.execute(sql);

                  } catch (Exception e) {

                  }

            }

            connection.commit();

//6452

          b:executeBatch方法


                   connection = ds.getConnection();

                  connection.setAutoCommit(false);

                  statement = connection.createStatement();

                  for (int i = 0; i < 100000; i++) {

                        String sql = "upsert into m_test_insert values('"+i+"','name1_" + i + "','120kg','name2_" + i + "','4','5','6','7'"

                                    + ",'8','9','10','11','12','13','14','15','16','17','18','19','20')";

                        statement.addBatch(sql);

                        if ((i + 1) % 10000 == 0) {

                              statement.executeBatch();

                              statement.clearBatch();

                              connection.commit();

                        }

                  }

                  statement.executeBatch();

                  statement.clearBatch();

                  connection.commit();

//39324


          c:preparestatement利用executeBatch 方法


                    connection = ds.getConnection();

                  connection.setAutoCommit(false);

                  statement = connection.prepareStatement("upsert into m_test_insert values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

                  for (int i = 0; i < 100000; i++) {

                        statement.setString(1, i + "");

                        statement.setString(2,"name1_" + i + "'");

                        statement.setString(3,"name2_" + i + "'");

                  statement.setString(4,"3");

                  statement.setString(5, "3");

                  statement.setString(6,"3");

                  statement.setString(7,"3");

                  statement.setString(8,"3");

                  statement.setString(9, "3");

                  statement.setString(10,"3");

                  statement.setString(11,"3");

                  statement.setString(12,"3");

                  statement.setString(13, "3");

                  statement.setString(14,"3");

                  statement.setString(15,"3");

                  statement.setString(16,"3");

                  statement.setString(17,"3");

                  statement.setString(18, "3");

                  statement.setString(19,"3");

                  statement.setString(20,"3");

                  statement.setString(21,"3");

                  statement.addBatch();

                        if ((i + 1) % 10000 == 0) {

                              statement.executeBatch();

                              statement.clearBatch();

                              connection.commit();

                        }

                  }

                  statement.executeBatch();

                  statement.clearBatch();

                  connection.commit();

//31809


**
**

**
**