Advertisement
Guest User

Untitled

a guest
May 17th, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.26 KB | None | 0 0
  1. package optimizer;
  2.  
  3.  
  4. import java.util.*;
  5. import java.sql.*;
  6.  
  7. public class opt
  8. {
  9.     private static boolean hasCommon(String permut,String rel)
  10.     {
  11.         int i,j;
  12.         for(i=0;i<permut.length();i++)
  13.         {
  14.             if(permut.charAt(i)!='('&&permut.charAt(i)!=')')
  15.             {
  16.                 for(j=0;j<rel.length();j++)
  17.                 {
  18.                     if(permut.charAt(i)==rel.charAt(j))
  19.                         return false;
  20.  
  21.                 }
  22.             }
  23.         }
  24.         return true;
  25.     }
  26.     private static boolean canJoin(String permut,String rel,Vector<String> allowed)
  27.     {
  28.         int i,j;
  29.         if(hasCommon(permut,rel))
  30.         {
  31.             for(i=0;i<permut.length();i++)
  32.             {
  33.                 for(j=0;j<rel.length();j++)
  34.                 {
  35.                
  36.                 if(!permut.contains(rel)&&(allowed.contains(Character.toString(permut.charAt(i))+Character.toString(rel.charAt(j)))||allowed.contains(Character.toString(rel.charAt(j))+Character.toString(permut.charAt(i)))))
  37.                     return true;
  38.                 }
  39.             }
  40.         }
  41.         return false;
  42.     }
  43.     private static int joinCost(int nt1,int ndt1,int nt2,int ndt2,int nrs)
  44.     {
  45.         int val=ndt1;
  46.         if(ndt1<ndt2)
  47.             val=ndt2;
  48.         return (((nt1+nt2)/nrs)+((nt1*nt2)/(nrs*val))+(nt1+nt2));
  49.        
  50.  
  51.  
  52.     }
  53.     public  static String optimize(Vector<String> rels,Vector<Vector<String>> rel_cols,Vector<String> allowed,int nrs)
  54.     {
  55.         int i,j,k;
  56.         TreeMap single_rel = new TreeMap<String,Integer>();
  57.         TreeMap rel_tup= new TreeMap<String,Integer>();
  58.         Random rand = new Random();
  59.         TreeMap rel_dist_tup= new TreeMap<String,Integer>();
  60.         Connection con = null;
  61.         String url = "jdbc:mysql://localhost:3306/";
  62.         String db = "hnrs";
  63.         String driver = "com.mysql.jdbc.Driver";
  64.         String user = "root";
  65.         String pass = "";
  66.         String meta_table="meta_info";
  67.         String size_table="table_size";
  68.         HashMap temp_d = new HashMap<String,HashMap<String,Integer>>();
  69.         for(i=0;i<rels.size();i++)
  70.         {
  71.             try{
  72.                 Class.forName(driver);
  73.                 con = DriverManager.getConnection(url+db, user, pass);
  74.                 Statement st = con.createStatement();
  75.                 ResultSet res = st.executeQuery("SELECT size FROM  "+size_table+" where table_name=\""+(String)rels.get(i)+"\"");
  76.                 res.next();
  77.     //          System.out.println("SELECT size FROM  "+size_table+" where table_name=\""+(String)rels.get(i)+"\"");
  78.                 System.out.println(res.toString());
  79.                 int a=res.getInt("size");
  80.                 Vector tutu=(Vector<String>)rel_cols.get(i);
  81.         //      System.out.println(tutu.toString());
  82.                 if(tutu.size()!=1)
  83.                 {
  84.                 for(j=0;j<tutu.size();j++)
  85.                 {  
  86.                     String temp_tutu=(String)tutu.get(j);
  87.                     int kash=temp_tutu.toString().indexOf('|');
  88.                     res = st.executeQuery("SELECT num_d_tuples FROM  "+meta_table+" where table_name=\""+(String)rels.get(i)+"\" and col_name=\""+temp_tutu.toString().substring(kash+1)+"\"");
  89.                 //  System.out.println("SELECT num_d_tuples FROM  "+meta_table+" where table_name=\""+(String)rels.get(i)+"\" and col_name=\""+temp_tutu.toString().substring(kash+1)+"\"");
  90.                     res.next();
  91.                     int b=res.getInt("num_d_tuples");
  92.                     String fafa=temp_tutu.substring(0,kash);
  93.                     if(temp_d.containsKey(rels.get(i)+fafa))
  94.                     {
  95.                         HashMap temp=(HashMap<String,Integer>)temp_d.get(rels.get(i)+fafa);
  96.                         temp.put(rels.get(i),new Integer(b));
  97.                         temp_d.remove(rels.get(i)+fafa);
  98.                         temp_d.put(rels.get(i)+fafa,temp);
  99.                     }
  100.                     else if(temp_d.containsKey(fafa+rels.get(i)))
  101.                     {
  102.                         HashMap temp=(HashMap<String,Integer>)temp_d.get(fafa+rels.get(i));
  103.                         temp.put(rels.get(i),new Integer(b));
  104.                         temp_d.remove(fafa+rels.get(i));
  105.                         temp_d.put(fafa+rels.get(i),temp);
  106.                     }
  107.                     else
  108.                     {
  109.                         HashMap temp = new HashMap<String,Integer>();
  110.                         temp.put(rels.get(i),new Integer(b));
  111.                         temp_d.put(rels.get(i)+fafa,temp);
  112.                     }
  113.                                    
  114.                 }
  115.                 }
  116.                 else
  117.                 {
  118.                     res = st.executeQuery("SELECT num_d_tuples FROM  "+meta_table+" where table_name=\""+(String)rels.get(i)+"\" and col_name=\""+tutu.get(0)+"\"");
  119.                     res.next();
  120.                     int b=res.getInt("num_d_tuples");
  121.                     rel_dist_tup.put((String)rels.get(i),new Integer(b));
  122.         //          System.out.println("---------------");
  123.                    
  124.                 }
  125.                 rel_tup.put((String)rels.get(i),a);
  126.                 // calculate the cost ??
  127.                 single_rel.put((String)rels.get(i),1);
  128.             }
  129.             catch (Exception e)
  130.             {
  131.                 e.printStackTrace();
  132.             }
  133.  
  134.         }
  135. //      System.out.println("req :"+ temp_d.toString());
  136. //      System.out.println("req :"+rel_dist_tup.toString());
  137.         TreeMap plan_tup_list = new TreeMap<String,Integer>(rel_tup);
  138.         TreeMap plan_dist_list = new TreeMap<String,Integer>(rel_dist_tup);
  139.         TreeMap plan_list = new TreeMap<String,Integer>();
  140.         Vector permuts=new Vector(rels);
  141.         TreeMap cost_list = new TreeMap<String,Integer>();
  142.         for(i=1;i<rels.size();i++)
  143.         {
  144.             /* Each level of join */
  145.         //  System.out.print(i);
  146.         //  System.out.println(":");
  147. //          Vector temp = new Vector<String>();
  148.             Vector cannotjoin = new Vector<String>();
  149.             for(j=0;j<permuts.size();j++)
  150.             {
  151.     //          System.out.println((String)permuts.get(j));
  152.                 int n_tup2 = (Integer)plan_tup_list.get((String)permuts.get(j));
  153.                 int n_d_tup2=0;
  154.                 boolean d_flag=true;
  155.                 if(plan_dist_list.containsKey((String)permuts.get(j)))
  156.                 {  
  157.                     n_d_tup2 = (Integer)plan_dist_list.get((String)permuts.get(j));
  158.                     d_flag=false;
  159.                 }
  160.                 for(k=0;k<permuts.size();k++)
  161.                 {
  162.                     //System.out.println("Can join ? "+ (String)permuts.get(j)+"--"+(String)permuts.get(k));
  163.                     if(!permuts.contains("("+(String)permuts.get(j)+")("+(String)permuts.get(k)+")")&&!cannotjoin.contains((String)permuts.get(j)+(String)permuts.get(k))&&canJoin((String)permuts.get(j),(String)permuts.get(k),allowed))
  164.                     {
  165.     //                  System.out.print("-- yes ");
  166.                         if(d_flag)
  167.                         {
  168.                             if(temp_d.containsKey((String)permuts.get(j)+(String)permuts.get(k)))
  169.                                 n_d_tup2=(Integer)(((HashMap<String,Integer>)temp_d.get((String)permuts.get(j)+(String)permuts.get(k))).get((String)permuts.get(j)));
  170.                             else if(temp_d.containsKey((String)permuts.get(k)+(String)permuts.get(j)))
  171.                                 n_d_tup2=(Integer)(((HashMap<String,Integer>)temp_d.get((String)permuts.get(k)+(String)permuts.get(j))).get((String)permuts.get(j)));
  172.                             else
  173.                                 System.out.println("Error1");
  174.                         }
  175.                         int n_d_tup1=0;
  176.                         if(plan_dist_list.containsKey((String)permuts.get(k)))
  177.                         {  
  178.                             n_d_tup1 = (Integer)plan_dist_list.get((String)permuts.get(k));
  179.                         }
  180.                         else
  181.                         {
  182.                             if(temp_d.containsKey((String)permuts.get(j)+(String)permuts.get(k)))
  183.                                 n_d_tup1=(Integer)(((HashMap<String,Integer>)temp_d.get((String)permuts.get(j)+(String)permuts.get(k))).get((String)permuts.get(k)));
  184.                             else if(temp_d.containsKey((String)permuts.get(k)+(String)permuts.get(j)))
  185.                                 n_d_tup1=(Integer)(((HashMap<String,Integer>)temp_d.get((String)permuts.get(k)+(String)permuts.get(j))).get((String)permuts.get(k)));
  186.                             else
  187.                                 System.out.println("Error2");
  188.  
  189.                         }
  190.  
  191.                         cannotjoin.addElement((String)permuts.get(k)+(String)permuts.get(j));
  192.                         String f_perm="("+(String)permuts.get(j)+")("+(String)permuts.get(k)+")";
  193.                         permuts.addElement(f_perm);
  194.                         plan_list.put(f_perm,1);
  195.                         int n_tup1 = (Integer)plan_tup_list.get((String)permuts.get(k));
  196.                         if(n_d_tup1<n_d_tup2)
  197.                         {
  198. //                          System.out.println("nt1:"+n_tup1+":nt2:"+n_tup2+":n_d_tup2:"+n_d_tup2);
  199. //                          System.out.println("test->"+(long)n_tup1*n_tup2/n_d_tup2);
  200.                             plan_tup_list.put(f_perm,new Integer((int)((long)n_tup1*n_tup2/n_d_tup2)));
  201.                             plan_dist_list.put(f_perm,n_d_tup2);
  202.  
  203.                         }
  204.                         else
  205.                         {
  206. //                          System.out.println("nt1:"+n_tup1+":nt2:"+n_tup2+":n_d_tup1:"+n_d_tup1);
  207. //                          System.out.println("test->"+(long)n_tup1*n_tup2/n_d_tup1);
  208.                             plan_tup_list.put(f_perm,new Integer((int)((long)n_tup1*n_tup2/n_d_tup1)));
  209.                             plan_dist_list.put(f_perm,n_d_tup1);
  210.                         }
  211. //                      System.out.println("t1-"+n_d_tup1+" t2-"+n_d_tup2);
  212. //                      System.out.println("tup_list:"+plan_tup_list.toString());
  213. //                      System.out.println("dup_list:"+plan_dist_list.toString());
  214.                     //  System.out.println("cost:"+f_perm+":"+joinCost(n_tup1,n_d_tup1,n_tup2,n_d_tup2,nrs));
  215.                         int cost=+joinCost(n_tup1,n_d_tup1,n_tup2,n_d_tup2,nrs);
  216.                         if(cost_list.containsKey((String)permuts.get(k)))
  217.                         {
  218. //                          System.out.println("Adding cost of "+(String)permuts.get(k)+" to "+(String)permuts.get(k));
  219.                             cost+=((Integer)cost_list.get((String)permuts.get(k))).intValue();
  220.                         }
  221. //                          cost+=Integer.toInt(cost_list.get((String)permuts.get(k)));        
  222.                         cost_list.put(f_perm,new Integer(cost));
  223. //                      System.out.println("cost_list:"+cost_list.toString());
  224.  
  225.                        
  226.                     }
  227.  
  228.  
  229.                 }
  230.             }
  231. //          System.out.println(temp.capacity());
  232. //          if(temp.size()!=0)
  233. //              permuts=temp;
  234.            
  235.  
  236.     }
  237.         Vector<Integer> dups=new Vector();
  238.         TreeMap final_list = new TreeMap<String,Integer>(cost_list);
  239.     //  System.out.println("-->"+plan_tup_list.toString());
  240.         Set keys = plan_tup_list.keySet();
  241.         int length=0;
  242.         for (Iterator ii = keys.iterator(); ii.hasNext();) {
  243.             String key = (String) ii.next();
  244. //          System.out.println(key);
  245.             if(key.length()>length)
  246.                 length=key.length();
  247.             Integer value = (Integer) plan_tup_list.get(key);
  248.             if(!dups.contains(value))
  249.                 dups.add(value);
  250.             else
  251.                 final_list.remove(key);
  252.  
  253.  
  254.         }          
  255. //      System.out.println(length+"-->"+final_list.toString());
  256.         String ret=new String();
  257.         int minCost=999999999;
  258.         for(Iterator ij=final_list.keySet().iterator();ij.hasNext();)
  259.         {
  260.             String key=(String) ij.next();
  261.  
  262.             if(key.length()==length && minCost>(Integer) final_list.get(key))
  263.             {
  264.                 ret=key;
  265.                 minCost=(Integer) final_list.get(key);
  266.  
  267.             }
  268.         }
  269.     //  System.out.println("Key is ->"+ret+"min cost ->"+minCost);
  270.         return ret;
  271.  
  272. }
  273.     public static void main(String[] args)
  274. {
  275.     Vector rels=new Vector();
  276.     Vector cols=new Vector();
  277.     Vector final_one = new Vector<Vector<String>>();
  278.     Vector temp = new Vector<String>();
  279.     rels.addElement("I");
  280.     cols.addElement("S_NATIONKEY:");
  281.     final_one.addElement(cols);
  282.     rels.addElement("H");
  283.     cols=new Vector();
  284.     cols.addElement("O_COMMENT:");
  285.  
  286.     final_one.addElement(cols);
  287.     rels.addElement("T");
  288.     cols=new Vector();
  289.     cols.addElement("I|C_NATIONKEY:");
  290.     cols.addElement("H|C_NAME:");
  291.  
  292.     final_one.addElement(cols);
  293.     Vector all=new Vector();
  294.  
  295.     all.addElement("IT");
  296.     all.addElement("TH");
  297.     //      System.out.println(rels.toString());
  298.     //      ///     System.out.println(final_one.toString());
  299.                     String out=optimize(rels,final_one,all,4);
  300.     //              //      System.out.println(out);
  301.     }
  302. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement