日期:2014-05-18  浏览次数:20456 次

提高数据分析的效率,减少分析时间
我做的是一个彩票双色球项目,希望当用户投注的号码数据量达到10w、100w或更多时,当开奖时,通过分析用户是否中奖的时间减少!!!
希望高手能给个解决方案,再次了!!!期待着您的解决方法!!!!

------解决方案--------------------
首先,你在插入用户投注号码的时候,对红球排一下序,然后比较的时候,也先对中奖红球排下序,剩下的问题就是求两个数组相同的数字有几个的问题。
这里有一段代码是我测试的结果:
C# code

static void Test()
{
    int[] winNumRed = new int[] { 7, 10, 19, 25, 26, 33 };
    int winNumBlue = 8;

    DateTime startDate = DateTime.Now;

    for (int i = 0; i < 10000000; ++i)
    {
        int[] selectedNumRed = new int[] { 1, 8, 12, 27, 29, 32 };
        int selectedBlue = 12;

        int redNum = 0;
        // 方法一
        int j = 0, k = 0;
        while (j < 6 && k < 6)
        {
            int jNum = selectedNumRed[j];
            int kNum = winNumRed[k];
            if (jNum < kNum)
                ++j;
            else if (jNum == kNum)
            {
                ++redNum;
                ++j;
                ++k;
            }
            else
                ++k;
        }

        // 方法二
        //for (int j = 0; j < 6; ++j)
        //{
        //    if (winNumRed.Contains(selectedNumRed[j]))
        //        ++redNum;                
        //}

        bool blueFlag = winNumBlue == selectedBlue;
    }

    DateTime endDate = DateTime.Now;

    Console.WriteLine(endDate - startDate);
}

------解决方案--------------------
SQL 代理不是程序,是 SQL Server 提供的一个服务,类似于 Windows 的定时任务,你可以在代理中启动存储过程、执行定时备份等等,对于你的问题,你可以看下这篇文章:
http://www.cnblogs.com/jasmine_xm/archive/2010/07/21/1782601.html
------解决方案--------------------
还有,你也可以用触发器来实现,当插入开奖数据后就触发。不过我觉得还是代理好些,大数据量的处理最好放在深夜来执行,不可能让人在深夜巴巴地等着去插入开奖数据吧。