копирование данных
От: vitalik_4  
Дата: 11.09.07 20:20
Оценка:
Пожалуйста подскажите. Надо прегнать по сетке (128K) часть записей из одной БД MySQL в другую. Пока делаю так:


static int CopyToTMP()
{
uint max_id = uint.Parse(GetXMLData(XMLSECTION.CurrentDataGpsID));
MySqlConnection conn = GetConnection(true);
string comand = "SELECT Mobitel_ID,Message_ID,Latitude,Longitude,Altitude,UnixTime,Speed,Direction,Valid,InMobitelID,Events,Sensor1,Sensor2,Sensor3,Sensor4,Sensor5,Sensor6,Sensor7,Sensor8,LogID,isShow,whatIs,Counter1,Counter2,Counter3,Counter4 FROM datagps WHERE Mobitel_ID IN (SELECT Mobitel_ID FROM mobitels)AND Valid=1 AND Datagps_ID>" +
max_id.ToString()+ " ORDER BY Datagps_ID";
MySqlCommand cmd = new MySqlCommand(comand, conn);
conn.Open();

MySqlConnection rem_conn = GetConnection(false);
MySqlCommand cmd_ = new MySqlCommand("", rem_conn);
rem_conn.Open();

MySqlDataReader reader = cmd.ExecuteReader();
Console.WriteLine();
int count = 0;
while (reader.Read())
{
cmd_.CommandText = "INSERT INTO datagps(Mobitel_ID,Message_ID,Latitude,Longitude,Altitude,UnixTime,Speed,Direction,Valid,InMobitelID,Events,Sensor1,Sensor2,Sensor3,Sensor4,Sensor5,Sensor6,Sensor7,Sensor8,LogID,isShow,whatIs,Counter1,Counter2,Counter3,Counter4) VALUES(" +
reader[0] + "," + reader[1] + "," + reader[2] + "," + reader[3] +
"," + reader[4] + "," + reader[5] + "," + reader[6] + "," + reader[7] +
"," + reader[8] + "," + reader[9] + "," + reader[10] + "," + reader[11] +
"," + reader[12] + "," + reader[13] + "," + reader[14] + "," + reader[15] +
"," + reader[16] + "," + reader[17] + "," + reader[18] + "," + reader[19] +
"," + reader[20] + "," + reader[21] + "," + reader[22] + "," + reader[23] +
"," + reader[24] + "," + reader[25] + ")";

Console.Clear();
Console.WriteLine("{0}", count);
count += cmd_.ExecuteNonQuery();
}
reader.Close();
rem_conn.Close();
conn.Close();
return count;
}

По 100Мбитной локалке 1млн. записей перегоняется за 18мин, сколько это будет на 128К даже считать не хочу .
Понимаю, код кривой, и никуда не годится... подскажите как его сделать не таким кривым. Интересует повышение
скорости и надежности работы. Использовать транзакции ? А как ? Для каждого INSERTa свою транзакцию ? Или одну для
всех INSERTов ? Если можно киньте примеры кода, или хоть подскажите в каком направлении копать. Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.