/// * // * Copyright 1999-2012 Alibaba Group. // * // * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file /// except // * in compliance with the License. You may obtain a copy of the License at // * // * http://www.apache.org/licenses/LICENSE-2.0 // * // * Unless required by applicable law or agreed to in writing, software distributed under the /// License // * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either /// express // * or implied. See the License for the specific language governing permissions and limitations /// under // * the License. // */ /// ** // * (created at 2012-5-30) // */ // package fm.liu.timo.route.perf; // // import fm.liu.timo.config.model.SchemaConfig; // import fm.liu.timo.parser.ast.stmt.SQLStatement; // import fm.liu.timo.parser.ast.stmt.dml.DMLInsertStatement; // import fm.liu.timo.parser.ast.stmt.dml.DMLSelectStatement; // import fm.liu.timo.parser.recognizer.SQLParserDelegate; // import fm.liu.timo.parser.recognizer.mysql.lexer.MySQLLexer; // import fm.liu.timo.parser.recognizer.mysql.syntax.MySQLDMLInsertParser; // import fm.liu.timo.parser.recognizer.mysql.syntax.MySQLDMLSelectParser; // import fm.liu.timo.parser.recognizer.mysql.syntax.MySQLExprParser; // import fm.liu.timo.parser.visitor.MySQLOutputASTVisitor; // import fm.liu.timo.route.ServerRouter; // import fm.liu.timo.route.visitor.PartitionKeyVisitor; // /// ** // * @author <a href="mailto:shuo.qius@alibaba-inc.com">QIU Shuo</a> // */ // public class ServerRoutePerformance { // // private static abstract class TestProvider { // public abstract String getSql() throws Exception; // // public abstract void route(SchemaConfig schema, int loop, String sql) throws Exception; // } // // private static class ShardingDefaultSpace extends TestProvider { // private SQLStatement stmt; // // @Override // public void route(SchemaConfig schema, int loop, String sql) throws Exception { // for (int i = 0; i < loop; ++i) { // // SQLLexer lexer = new SQLLexer(sql); // // DMLSelectStatement select = new DMLSelectParser(lexer, new // // SQLExprParser(lexer)).select(); // // PartitionKeyVisitor visitor = new // // PartitionKeyVisitor(schema.getTablesSpace()); // // select.accept(visitor); // // visitor.getColumnValue(); // ServerRouter.route(schema, sql, null, null); // // // StringBuilder s = new StringBuilder(); // // stmt.accept(new MySQLOutputASTVisitor(s)); // // s.toString(); // } // } // // @Override // public String getSql() throws Exception { // String sql = // "insert into xoffer (member_id, gmt_create) values ('1','2001-09-13 20:20:33')"; // stmt = SQLParserDelegate.parse(sql); // return "insert into xoffer (member_id, gmt_create) values ('1','2001-09-13 20:20:33')"; // } // } // // private static class ShardingTableSpace extends TestProvider { // private SQLStatement stmt; // // @Override // public void route(SchemaConfig schema, int loop, String sql) throws Exception { // for (int i = 0; i < loop; ++i) { // // SQLLexer lexer = new SQLLexer(sql); // // DMLSelectStatement select = new DMLSelectParser(lexer, new // // SQLExprParser(lexer)).select(); // // PartitionKeyVisitor visitor = new // // PartitionKeyVisitor(schema.getTablesSpace()); // // select.accept(visitor); // // visitor.getColumnValue(); // ServerRouter.route(schema, sql, null, null); // // // StringBuilder s = new StringBuilder(); // // stmt.accept(new MySQLOutputASTVisitor(s)); // // s.toString(); // } // } // // @Override // public String getSql() throws Exception { // String sql = // "insert into offer (member_id, gmt_create) values ('1','2001-09-13 20:20:33')"; // stmt = SQLParserDelegate.parse(sql); // return "insert into offer (member_id, gmt_create) values ('1','2001-09-13 /// 20:20:33'),('1','2001-09-13 20:20:34')"; // } // } // // private static class ShardingMultiTableSpace extends TestProvider { // private SQLStatement stmt; // // @Override // public void route(SchemaConfig schema, int loop, String sql) throws Exception { // for (int i = 0; i < loop * 5; ++i) { // // SQLLexer lexer = new SQLLexer(sql); // // DMLSelectStatement select = new DMLSelectParser(lexer, new // // SQLExprParser(lexer)).select(); // // PartitionKeyVisitor visitor = new // // PartitionKeyVisitor(schema.getTablesSpace()); // // select.accept(visitor); // // visitor.getColumnValue(); // ServerRouter.route(schema, sql, null, null); // // // StringBuilder s = new StringBuilder(); // // stmt.accept(new MySQLOutputASTVisitor(s)); // // s.toString(); // } // } // // @Override // public String getSql() throws Exception { // String sql = "select id,member_id,gmt_create from offer where member_id in ('22')"; // stmt = SQLParserDelegate.parse(sql); // return "select id,member_id,gmt_create from offer where member_id in /// ('1','22','333','1124','4525')"; // } // } // // private static class SelectShort extends TestProvider { // @Override // public void route(SchemaConfig schema, int loop, String sql) throws Exception { // for (int i = 0; i < loop; ++i) { // MySQLLexer lexer = new MySQLLexer(sql); // DMLSelectStatement select = // new MySQLDMLSelectParser(lexer, new MySQLExprParser(lexer)).select(); // PartitionKeyVisitor visitor = new PartitionKeyVisitor(schema.getTables()); // select.accept(visitor); // // visitor.getColumnValue(); // // ServerRoute.route(schema, sql); // } // } // // @Override // public String getSql() throws Exception { // return " seLEcT id, member_id , image_path \t , image_size , STATUS, gmt_modified from /// offer_detail wheRe \t\t\n offer_id = 123 AND member_id\t=\t-123.456"; // } // } // // private static class SelectLongIn extends TestProvider { // @Override // public void route(SchemaConfig schema, int loop, String sql) throws Exception { // for (int i = 0; i < loop; ++i) { // MySQLLexer lexer = new MySQLLexer(sql); // DMLSelectStatement select = // new MySQLDMLSelectParser(lexer, new MySQLExprParser(lexer)).select(); // PartitionKeyVisitor visitor = new PartitionKeyVisitor(schema.getTables()); // select.accept(visitor); // // visitor.getColumnValue(); // // ServerRoute.route(schema, sql); // } // } // // @Override // public String getSql() throws Exception { // StringBuilder sb = new StringBuilder(); // sb.append( // " seLEcT id, member_id , image_path \t , image_size , STATUS, gmt_modified from") // .append(" offer_detail wheRe \t\t\n offer_id in ("); // for (int i = 0; i < 1024; ++i) { // if (i > 0) // sb.append(", "); // sb.append(i); // } // sb.append(") AND member_id\t=\t-123.456");// System.out.println(sb.length()); // return sb.toString(); // } // } // // private static class InsertLong extends TestProvider { // // @Override // public String getSql() throws Exception { // StringBuilder sb = // new StringBuilder("insert into offer_detail (offer_id, gmt) values "); // for (int i = 0; i < 1024; ++i) { // if (i > 0) // sb.append(", "); // sb.append("(" + i + ", now())"); // } // // System.out.println(sb.length()); // return sb.toString(); // } // // @Override // public void route(SchemaConfig schema, int loop, String sql) throws Exception { // for (int i = 0; i < loop; ++i) { // MySQLLexer lexer = new MySQLLexer(sql); // DMLInsertStatement insert = // new MySQLDMLInsertParser(lexer, new MySQLExprParser(lexer)).insert(); // // PartitionKeyVisitor visitor = new // // PartitionKeyVisitor(schema.getTablesSpace()); // // insert.accept(visitor); // // visitor.getColumnValue(); // // SQLLexer lexer = new SQLLexer(sql); // // new DMLInsertParser(lexer, new // // SQLExprParser(lexer)).insert(); // // RouteResultset rrs = ServerRoute.route(schema, sql); // // System.out.println(rrs); // } // } // } // // private static class InsertLongSQLGen extends TestProvider { // private DMLInsertStatement insert; // private int sqlSize; // // @Override // public String getSql() throws Exception { // String sql = new InsertLong().getSql(); // MySQLLexer lexer = new MySQLLexer(sql); // insert = new MySQLDMLInsertParser(lexer, new MySQLExprParser(lexer)).insert(); // return sql; // } // // @Override // public void route(SchemaConfig schema, int loop, String sql) throws Exception { // for (int i = 0; i < loop; ++i) { // StringBuilder sb = new StringBuilder(sqlSize); // insert.accept(new MySQLOutputASTVisitor(sb)); // sb.toString(); // } // } // } // // private static class InsertLongSQLGenShort extends TestProvider { // private DMLInsertStatement insert; // private int sqlSize; // // @Override // public String getSql() throws Exception { // StringBuilder sb = // new StringBuilder("insert into offer_detail (offer_id, gmt) values "); // for (int i = 0; i < 8; ++i) { // if (i > 0) // sb.append(", "); // sb.append("(" + (i + 100) + ", now())"); // } // String sql = sb.toString(); // MySQLLexer lexer = new MySQLLexer(sql); // insert = new MySQLDMLInsertParser(lexer, new MySQLExprParser(lexer)).insert(); // sqlSize = new InsertLong().getSql().length(); // return sql; // } // // @Override // public void route(SchemaConfig schema, int loop, String sql) throws Exception { // for (int i = 0; i < loop; ++i) { // for (int j = 0; j < 128; ++j) { // StringBuilder sb = new StringBuilder(); // insert.accept(new MySQLOutputASTVisitor(sb)); // sb.toString(); // } // } // } // } // // public void perf() throws Exception { // TestProvider provider; // provider = new InsertLongSQLGen(); // provider = new InsertLongSQLGenShort(); // provider = new SelectShort(); // provider = new InsertLong(); // provider = new SelectLongIn(); // provider = new ShardingMultiTableSpace(); // provider = new ShardingDefaultSpace(); // provider = new ShardingTableSpace(); // // SchemaConfig schema = getSchema(); // String sql = provider.getSql(); // System.out.println(ServerRouter.route(schema, sql, null, null)); // long start = System.currentTimeMillis(); // provider.route(schema, 1, sql); // long end; // int loop = 200 * 10000; // start = System.currentTimeMillis(); // provider.route(schema, loop, sql); // end = System.currentTimeMillis(); // System.out.println((end - start) * 1000.0d / loop + " us"); // } // // private SchemaConfig schema; // // public ServerRoutePerformance() { // // TimoConfig conf = TimoServer.getInstance().getConfig(); // // schema = conf.getSchemas().get("cndb"); // } // // /** // * @param args // * @throws Exception // */ // public static void main(String[] args) throws Exception { // ServerRoutePerformance perf = new ServerRoutePerformance(); // perf.perf(); // } // // protected SchemaConfig getSchema() { // return schema; // } // // }