Esempio n. 1
0
        public override void SelectFromProxyHandler(SelectMessageReader request)
        {
            List <List <long> > cellIds = request.cellIds;
            //利用发送来的信息构造condition
            Table               table   = new Table(request.columnNameList, request.columnTypeList);
            Condition           con     = new Condition(table, request.condition);
            List <List <long> > result  = new List <List <long> >();
            List <Thread>       threads = new List <Thread>();

            foreach (List <long> cellId in cellIds)
            {
                if (Global.CloudStorage.GetServerIdByCellId(cellId[0]) == Global.MyServerId)  //这一行第一列存储于本服务器
                {
                    //每行开一个线程处理
                    RowMessage rm = new RowMessage();
                    rm.cellId    = cellId;
                    rm.con       = con;
                    rm.types     = request.columnTypeList;
                    rm.usedIndex = request.usedIndex;
                    rm.result    = result;
                    Thread thread = new Thread(new ParameterizedThreadStart(filter));
                    threads.Add(thread);
                    thread.Start(rm);
                }
            }
            foreach (Thread thr in threads)
            {
                thr.Join();
            }
            //此时已经处理完结果
            Global.CloudStorage.SelectFromServerToDatabaseProxy(0,
                                                                new SelectResultResponseWriter(Global.MyServerId, result));
        }
Esempio n. 2
0
 Dictionary <int, List <List <long> > > idDict = new Dictionary <int, List <List <long> > >(); //收集cellid消息
 #region 邹开发 select
 public override void SelectFromClientHandler(SelectMessageReader request, SelectResponseWriter response)
 {
     idDict.Clear();
     for (int i = 0; i < Global.ServerCount; i++)
     {
         //每个服务器挨个发送
         SelectMessageWriter smw = new SelectMessageWriter(request.columnNameList,
                                                           request.columnTypeList, request.cellIds, request.usedIndex, request.condition);
         Global.CloudStorage.SelectFromProxyToDatabaseServer(i, smw);
     }
     sem.WaitOne();  //等待服务器全部返回信息
     response.cellIds = new List <List <long> >();
     //将信息合并
     for (int i = 0; i < Global.ServerCount; i++)
     {
         response.cellIds.AddRange(idDict[i]);
     }
 }