示例#1
0
    private void loadDatabase(string dbname)
    {
        string connectionString = "server=.\\SQLEXPRESS;" +
                                  "Trusted_Connection=yes;" +
                                  "database=" + dbname + "; " +
                                  "connection timeout=30;" +
                                  "Integrated Security = SSPI;";

        DataHelpe.Constr = connectionString;
        string           sql      = "select * from IDlist order by px asc";
        DataTable        IDlist   = DataHelpe.GetDataTable(sql);
        List <DataTable> database = new List <DataTable>();

        VertexIDLabel.database = IDlist;
        Dictionary <int, List <NBEntry> > NBindex;

        switch (dbname)
        {
        case "LUBM":
            NBindex = IndexInMemory.loadNBIndex("N1B1");
            break;

        case "uniprot":
            NBindex = IndexInMemory.loadNBIndex("N1B2Hop");
            break;

        default:
            NBindex = IndexInMemory.loadNBIndex("N1B1");    //("N3B");
            break;
        }
        VertexIDLabel.NBindex = NBindex;
    }
        //Build NB index

        /*
         * static void Main(string[] args)
         * {
         *  buildIndex dataset = new buildIndex();
         *  dataset.build3HopIndex(488378, "N3B");
         * }
         */

        /*
         * //build IDMap Index
         * static void Main(string[] args)
         * {
         *  SqlBulkCopy sqlBulkCopy = new SqlBulkCopy("server=(local);uid=sa;pwd=-q-q3278800;database=LUBMOld;Connect Timeout=500");
         *  sqlBulkCopy.DestinationTableName = "IDlist";
         *  sqlBulkCopy.BulkCopyTimeout = 600;
         *  sqlBulkCopy.WriteToServer(directedNeighborhood.buildIDMAP());
         *  sqlBulkCopy.Close();
         * }
         * */



        static void Main(string[] args)
        {
            // inital step of query graph and original graph
            DataTable queryGraph    = new DataTable();
            DataTable keywordIDList = new DataTable();
            Dictionary <int, string> queryIDWithKeyword = new Dictionary <int, string>();
            string    sql    = "select * from IDlist order by px asc";
            DataTable IDlist = DataHelpe.GetDataTable(sql);
            //update new index in memory method to improve query performance.
            Dictionary <int, List <NBEntry> > NBindex = IndexInMemory.loadNBIndex("N3B");
            DataTable insertTable = new DataTable();

            insertTable.Columns.Add("queryTemplateID", typeof(int));
            insertTable.Columns.Add("queryTime", typeof(double));
            int i = 2;
            int j = 0;

            while (i < 11)
            {
                string sqlQueryGraph = "select * from queryGraphTemplates where queryTemplateID=" + i;
                queryGraph = DataHelpe.GetDataTable(sqlQueryGraph);
                string keywordList = "select * from queryIDlist where queryTemplateID=" + i;
                keywordIDList = DataHelpe.GetDataTable(keywordList);
                if (queryGraph.Rows.Count == 0)
                {
                    queryGraph.Clear();
                    keywordIDList.Clear();
                    queryIDWithKeyword.Clear();
                    Console.WriteLine(i);
                    i++;
                    continue;
                }
                foreach (DataRow dr in keywordIDList.Rows)
                {
                    queryIDWithKeyword.Add((int)dr["queryNodeID"], (string)dr["generalizedKeyword"]);
                }
                Dictionary <string, List <int> > intervalForString = intervalString.intervalStringGeneration(queryIDWithKeyword, IDlist);
                DataTable queryGraph1 = new DataTable();

                //begin 3 hops
                double diff1 = 0;
                while (true)
                {
                    queryGraph1 = queryGraph.Copy();
                    Console.WriteLine("Begin one level tree Graph By Example algorithm for full 3 level indexing");
                    TimeSpan diff11 = GBEBasedOnOneLevelTreeForThreeHops.componentMatchingTime(queryGraph1, queryIDWithKeyword, IDlist, NBindex, intervalForString);
                    queryGraph1 = queryGraph.Copy();
                    Console.WriteLine("Begin one level tree Graph By Example algorithm for full 3 level indexing");
                    TimeSpan diff12 = GBEBasedOnOneLevelTreeForThreeHops.componentMatchingTime(queryGraph1, queryIDWithKeyword, IDlist, NBindex, intervalForString);
                    queryGraph1 = queryGraph.Copy();
                    Console.WriteLine("Begin one level tree Graph By Example algorithm for full 3 level indexing");
                    TimeSpan diff13 = GBEBasedOnOneLevelTreeForThreeHops.componentMatchingTime(queryGraph1, queryIDWithKeyword, IDlist, NBindex, intervalForString);
                    queryGraph1 = queryGraph.Copy();
                    Console.WriteLine("Begin one level tree Graph By Example algorithm for full 3 level indexing");
                    TimeSpan diff14 = GBEBasedOnOneLevelTreeForThreeHops.componentMatchingTime(queryGraph1, queryIDWithKeyword, IDlist, NBindex, intervalForString);
                    queryGraph1 = queryGraph.Copy();
                    Console.WriteLine("Begin one level tree Graph By Example algorithm for full 3 level indexing");
                    TimeSpan diff15 = GBEBasedOnOneLevelTreeForThreeHops.componentMatchingTime(queryGraph1, queryIDWithKeyword, IDlist, NBindex, intervalForString);
                    diff1 = (diff12.TotalMilliseconds + diff13.TotalMilliseconds + diff14.TotalMilliseconds + diff15.TotalMilliseconds) / 4;
                    double deviation = Math.Pow((diff12.TotalMilliseconds - diff1), 2) + Math.Pow((diff13.TotalMilliseconds - diff1), 2) + Math.Pow((diff14.TotalMilliseconds - diff1), 2) + Math.Pow((diff15.TotalMilliseconds - diff1), 2);
                    if (deviation < (0.2 * diff1) * (0.2 * diff1) * 4)
                    {
                        break;
                    }
                }
                Console.WriteLine(diff1);
                insertTable.Rows.Add(i, diff1);


                //begin 1 level tree
                double diff4 = 0;
                while (true)
                {
                    queryGraph1 = queryGraph.Copy();
                    Console.WriteLine("Begin STWIGPLUS");
                    TimeSpan diff41 = STWIGPlus.componentMatchingTime(queryGraph1, queryIDWithKeyword, IDlist, NBindex, intervalForString);
                    queryGraph1 = queryGraph.Copy();
                    TimeSpan diff42 = STWIGPlus.componentMatchingTime(queryGraph1, queryIDWithKeyword, IDlist, NBindex, intervalForString);
                    queryGraph1 = queryGraph.Copy();
                    TimeSpan diff43 = STWIGPlus.componentMatchingTime(queryGraph1, queryIDWithKeyword, IDlist, NBindex, intervalForString);
                    queryGraph1 = queryGraph.Copy();
                    TimeSpan diff44 = STWIGPlus.componentMatchingTime(queryGraph1, queryIDWithKeyword, IDlist, NBindex, intervalForString);
                    queryGraph1 = queryGraph.Copy();
                    TimeSpan diff45 = STWIGPlus.componentMatchingTime(queryGraph1, queryIDWithKeyword, IDlist, NBindex, intervalForString);
                    diff4 = (diff42.TotalMilliseconds + diff43.TotalMilliseconds + diff44.TotalMilliseconds + diff45.TotalMilliseconds) / 4;
                    double deviation = Math.Pow((diff42.TotalMilliseconds - diff4), 2) + Math.Pow((diff43.TotalMilliseconds - diff4), 2) + Math.Pow((diff44.TotalMilliseconds - diff4), 2) + Math.Pow((diff45.TotalMilliseconds - diff4), 2);
                    if (deviation < (0.2 * diff4) * (0.2 * diff4) * 4)
                    {
                        break;
                    }
                }
                Console.WriteLine(diff4);
                insertTable.Rows.Add(i + 300, diff4);
                //finish 1 level tree
                queryGraph.Clear();
                keywordIDList.Clear();
                queryIDWithKeyword.Clear();
                Console.WriteLine(i);
                i++;
                j++;
                if (j == 1)
                {
                    SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(DataHelpe.Constr);
                    sqlBulkCopy.DestinationTableName = "queryTime";
                    sqlBulkCopy.BulkCopyTimeout      = 600;
                    sqlBulkCopy.WriteToServer(insertTable);
                    sqlBulkCopy.Close();
                    insertTable.Clear();
                    j = 0;
                }
            }
        }