日志6

   数据采集、显示的技术都解决了,尽管这些还是分开调试完成,还有待集成。当然技术还有待优化甚至选型更换而重来。但这要等现有的东西消化了,开发再熟练了进行。目前先搞出一个可用的、看上去还行的东西。
   昨天,搞数据处理这块,编写SQL语句。要用到JOIN,查了一下,概念不少:笛卡积、内连接、外连接、左连接、右连接等。还好只需最简单的内连接,而且找到了三种实现语句,就用了最容易理解的。
   不知两个20多万与40多万的数据join效率如何?而且实际数据很可能翻数倍。首先我在navicat上试了下,很失望,运行了3000秒也没结果。当然我没一直傻等,在运行不到600秒的时候,失去耐心了,这是不可接受的时间。但没停,希望看看究竟。我试着用“事务”方法来解决。
   采集这两个大数据insert本地MYSQL表时用的就是“事务”方法,测试程序搞出来了,运行很快,但才发现忽视了如何返回数据结果,语句指返回状态!以前执行的是insert输出到表。现在呢?不知所为?
    MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = conn;
            MySqlTransaction tx = conn.BeginTransaction();
            cmd.Transaction = tx;
            try
            {
                    
                        cmd.CommandText = sql; 
                        result += cmd.ExecuteNonQuery(); 只有result返回。
   虽然result的返回值也时-1;但我感觉语句被执行了,数据多执行的时间也长,只是JOIN不适合这代码,无实际效果的代码,所以返回-1.
   有点绝望,于是不用“事务”方法,看看效果如何。测试程序出来了,一个表20万记录,另一个1500记录,30秒可出结果。但1500上升到1702条时不行了,而下降到1599条时可以。没有再准确定位。
   MySqlDataAdapter Da = new MySqlDataAdapter(SQL, connection);
        DataTable dt = new DataTable(Table_name);
        Da.Fill(dt);    ~~在此处等30多秒报错或正确执行~~ 
        return dt;
   错误信息是“超时没反应”等,但我认为正确执行和超时都是30多秒,说明是这个类的方法只容许运行30多秒,也就是限时,超过就报错。也许可以设置一下?但干这点事也耗去了半个下午和一晚,休息。
   今早,躺在床上忽然想到,我何不先把表都下载到DataSet,然后在就可不用SQL语句,编写C#代码处理了,时间也许更快,当然代码会多些。先前进再说。
   好了,今天的任务明确了,而且更有谱了,也许能顺利完成!

猜你喜欢

转载自blog.csdn.net/weixin_44618111/article/details/87930000