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)); }
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]); } }