[转载]兼容Mono的下一代云环境Web开发框架ASP.NET vNext - 张善友 - 博客园

mikel阅读(1369)

转载兼容Mono的下一代云环境Web开发框架ASP.NET vNext – 张善友 – 博客园.

微软在2014年5月12日的TechEd大会上宣布将会发布下一代ASP.NET框架 ASP.NET vNext的预览。此次发布的ASP.NET框架与以前相比发生了根本性的变化,凸显了微软“云优先”(cloud-first)的新战略思想。 Scott Hanselman发布博客对ASP.NET vNext进行了简要介绍。而且ASP.NET入驻Github 下一代ASP.NET将全部开源,写下本文记录下这个时刻。

微软在今年的Build大会上成立.NET开源基金会和以下这些产品的发布:

  • .NET Native – 提前编译.NET代码。一切都变得更快了。
  • .NET编译器平台(Roslyn) – 崭新的C#以及VB编译器,新的语言特性,编译即服务(compiler-as-a-service),以及,它是开源的。
  • Nextgen JIT – 为最新处理器优化的崭新的即时编译器(Just-in-time-compiler)

ASP.NET vNext的出现,将会把一切推上更高层次。今天,你用来运行ASP.NET的通用语言运行库(CLR)与桌面应用所使的是完全相同的。微软.NET团队 正在做的事情是:增加针对云计算环境进行优化的CLR版本。优化时考虑的场景包括“低内存消耗”以及“高吞吐量”等等。

ASP.NET vNext 使得你能够为每一个应用部署定制化的.NET框架。一个使用新版本代码库(library)的应用不会和部署在同一服务器上使用该代码库的不同版本的应用 打架。不同的应用甚至可以有不同优化侧重点的个性化的CLR。CLR以及针对云环境优化的代码库都成为了可自由选择和搭配的NuGet包。

Scott Hanselman博客上对 ASP.NET vNext的介绍告诉我们下一代的ASP.NET 是:

  • 针对云环境和服务器环境进行了优化
  • ASP.NET MVC以及WebAPI被统一到了同一个编程模型(programming model)中
  • “无编译”(no-compile)开发体验
  • 自带依赖注入(Dependency Injection out of box)
  • “并存”(side by side)——每个应用都有自己的运行时(runtime)以及框架随之部署
  • 一切都来自NuGet——即使是运行时(runtime)也一样
  • 完全通过.NET Foundation开源,并且接受外部开发者的贡献
  • ASP.NET vNext(还有Roslyn)可以在Mac和Linux上的Mono平台上运行。微软与Mono团队合作。将Mono加入到我们的测试矩阵(test matrix)里。将来我们在Mono上部署ASP.NET程序就和Windows上一样了,不会和现在一样有很多坑要注意。

相关新闻 :Microsoft shows off the next release of ASP.NET

VS2013 Update 2正式发布 .NET Framework云优先、移动优先

[转载]ECSHOP中国工商银行(ICBC)支付插件_舟清江碧_百度空间

mikel阅读(1161)

[转载]ECSHOP中国工商银行(ICBC)支付插件_舟清江碧_百度空间.

安装说明:
一、按工行的开发文档配置好环境。
1、ICBCEBankUtil.dll和infosecapi.dll两个dll文件拷贝到系统system32目录下;
2、运行“regsvr32 ICBCEBankUtil.dll”命令注册控件;
3、在httpd.conf中添加

  1. LoadModule php5_module “c:/WINSOWS/system32/ICBCEBankUtil.dll”
  2. LoadModule php5_module “c:/WINSOWS/system32/infosecapi.dll”

二、将解压后的 includes\  languages\ 下的文件copy到商城安装目录。

三、修改flow.php文件,在代码:

    elseif ($_REQUEST['step'] == 'done')
    {
     
    }

中加入以下内容:

    /* 读出购物车中的信息,给$order赋值,工行支付信息中需要 */
    $order['goodsNum']   = 0;  //购买货品的数量
    $order['goodsIDs']   = ''; //购买货品的货号
    $order['goodsNames'] = ''; //购买货品的名称
    $cs = "SELECT * FROM " . $ecs->table('cart') .
           " WHERE session_id = '" . SESS_ID . "' " .
           "AND parent_id = 0 AND is_gift = 0 AND rec_type = '$flow_type'";
    $cq = $db->query($cs);
    while($rq = $db->fetchRow($cq)){
           $order['goodsNum'] += 1;
           $order['goodsIDs'] .= $rq['goods_sn'].'-';
           $order['goodsNames'] .= $rq['goods_name'].'-';
    }

四、重启Apache

使用说明:
在后台支付方式中 将会多出一项“工行在线支付”,点击安装即可。

includes/modules/pament/icbc.php:

    <?php
     
    /**
     * ECSHOP 中国工商银行(ICBC)支付插件
     * ============================================================================
     * Jacklee的博客-专注于PHP技术
     * 网站地址: http://www.phpally.com
     * @author Jacklee<jack349392900@gmail.com>
     * @date 2012-03-08
     */
     
    if (!defined('IN_ECS'))
    {
        die('Hacking attempt');
    }
     
    $payment_lang = ROOT_PATH . 'languages/' . $GLOBALS['_CFG']['lang'] . '/payment/icbc.php';
     
    if (file_exists($payment_lang))
    {
        global $_LANG;
     
        include_once($payment_lang);
    }
     
    /**
     * 模块信息
     */
    if (isset($set_modules) >> $set_modules == true)
    {
        $i = isset($modules) ? count($modules) : 0;
        /* 代码 */
        $modules[$i]['code'] = basename(__FILE__, '.php');
       
        /* 描述对应的语言项 */
        $modules[$i]['desc'] = 'icbc_desc';
       
        /* 是否支持货到付款 */
        $modules[$i]['is_cod'] = '0'; //否
       
        /* 是否支持在线支付 */
        $modules[$i]['is_online'] = '1'; //是
       
        /* 作者 */
        $modules[$i]['author']  = 'Jacklee';
       
        /* 网址 */
        $modules[$i]['website'] = 'http://www.phpally.com';
       
        /* 版本号 */
        $modules[$i]['version'] = '1.0';
       
        /* 配置信息 */
        $modules[$i]['config'] = array(
            array('name' => 'merID', 'type' => 'text', 'value' => ''),//商户代码
            array('name' => 'merAcct', 'type' => 'text', 'value' => ''),//商户帐号
            array('name' => 'curType', 'type' => 'text', 'value' => ''),//支付币种
            
        );
        return;
    }
     
    class icbc
    {
        /**
         * 构造函数
         *
         * @access  public
         * @param
         *
         * @return void
         */
     
        function icbc()
        {
        }
     
        function __construct()
        {
            $this->icbc();
        }
     
       /**
         * 生成支付代码
         * @param   array   $order  订单信息
         * @param   array   $payment    支付方式信息
         */
       function get_code($order, $payment)
       {
               $strReturnCode = '';
            //————————————————-
            //– 根据定单生成 交易数据
            //————————————————-
            $TDT = '<?xml version="1.0" encoding="GBK" standalone="no"?>';
            $TDT .= '<B2CReq>';
            $TDT .= '<interfaceName>ICBC_PERBANK_B2C</interfaceName>';
            $TDT .= '<interfaceVersion>1.0.0.3</interfaceVersion>';
            $TDT .= '<orderInfo>';
            $TDT .= '<orderDate>'.local_date('YmdHis', $order['add_time']).'</orderDate>';
            $TDT .= '<orderid>'.$order['order_sn'].'</orderid>';//订单号
            $TDT .= '<amount>'.($order['order_amount'] * 100).'</amount>';//订单金额
            $TDT .= '<curType>'.$payment['cutType'].'</curType>';//支付币种 
            $TDT .= '<merID>'.$payment['merID'].'</merID>';//商户代码
            $TDT .= '<merAcct>'.$payment['merAcct'].'</merAcct>';//商户帐号
            $TDT .= '</orderInfo>';
            
            $TDT .= '<custom>';
            $TDT .= '<verifyJoinFlag>0</verifyJoinFlag>';//是否检验联名标志 D
            $TDT .= '<Language></Language>';//语种  默认为中文 D
            $TDT .= '</custom>';
            
            $TDT .= '<message>';
            $TDT .= '<goodsID>'.$order['goodsIDs'].'</goodsID>'; //商品编号
            $TDT .= '<goodsName>'.$order['goodsNames'].'</goodsName>';//商品名称
            $TDT .= '<goodsNum>'.$order['goodsNum'].'</goodsNum>';//商品数量
            $TDT .= '<carriageAmt></carriageAmt>';//已含运费金额
            $TDT .= '<merHint></merHint>';//商城提示
            $TDT .= '<remark1></remark1>';//备注字段1
            $TDT .= '<remark2></remark2>';//备注字段2
            $TDT .= '<merURL>http://www.fanrui.cn</merURL>';//处理完成后 跳转到的地址 D
            $TDT .= '<merVAR></merVAR>';//商户变量  会按原样返回
            $TDT .= '</message>';
            $TDT .= '</B2CReq>';
            $tranData = base64_encode($TDT);
               //————————————————-
               //– 初始化工行支付对象
               //————————————————-
               $icbcPayObj= new com('ICBCEBANKUTIL.B2CUtil'); 
            $rc=$icbcPayObj->init("c:\wamp\www\includes\icbc\ectest01.crt"
                            ,"c:\wamp\www\includes\icbc\ectest01.crt"
                            ,"c:\wamp\www\includes\icbc\ectest01.key"
                            ,$TDT);
            if($rc != 0){
                $errorCode = "初始化失败 调试代码:".$icbcPayObj->getRC();
                return $errorCode;
            }
            //———————————————————-
            //– 签名
            //———————————————————-
            $merSignMsg = '';
            $qianMing = $icbcPayObj->signC($TDT, strlen($TDT));
            if($qianMing == ''){
                $errorCode = "签名失败! 调试代码:".$icbcPayObj->getRC();
                return $errorCode;
            }else{
                $merSignMsg = base64_encode($qianMing);
            }
            //———————————————————–
            //– 验证签名
            //————————————————————-
            $qm_ok = $icbcPayObj->verifySignC($TDT, strlen($TDT), $qianMing, strlen($qianMing));
            if($qm_ok != 0){
                $errorCode = "签名验证失败! 调试代码:".$icbcPayObj->getRC();
                return $errorCode;
            }
            //————————————————————-
            //– 获取商户证书
            //————————————————————-
            $cert = $icbcPayObj->getCert(1);
            if($cert == ''){
                $errorCode = "获取商户证书失败! 调试代码:".$icbcPayObj->getRC();
                return $errorCode;
            }
            //————————————————————–
            //– 商城证书公钥
            //————————————————————–
            $file_handle = fopen("c:\wamp\www\includes\icbc\ectest01.crt", "r");
            $line = '';
            while (!feof($file_handle)) {
               $line .= fgets($file_handle);
            }
            $merCert = base64_encode($line);
            fclose($file_handle);
            //————————————————————-
            //– 生成支付form串
            //————————————————————-
            $strReturnCode = "<div style='text-align:center'>";
            $strReturnCode .= "<form name='form1' method='post' action='https://210.82.37.103/servlet/ICBCINBSEBusinessServlet'>";
            $strReturnCode .= "<INPUT NAME='interfaceName' TYPE='text' value='ICBC_PERBANK_B2C'>";
            $strReturnCode .= "<INPUT NAME='interfaceVersion' TYPE='text' value='1.0.0.3'>";
     
            $strReturnCode .= "<INPUT NAME='tranData' TYPE='hidden' value='".$tranData."' >";
            $strReturnCode .= "<INPUT NAME='merSignMsg' TYPE='hidden' value='".$merSignMsg."'>";
            $strReturnCode .= "<INPUT NAME='merCert' TYPE='hidden' value='".$merCert."'>";
            
            $strReturnCode .= "<input type='submit' value='工行在线支付'>";
            $strReturnCode .= "</form>";
            $strReturnCode .= "</div></br>";
            return $strReturnCode;
            
        }
     
        /**
         * 响应操作
         */
        function respond()
        {
           
        }
    }
     
    ?>

languages/zh_cn/payment/icbc.php:

    <?php
     
    /**
     * ECSHOP 中国工商银行(ICBC)支付 语言文件
     * ============================================================================
     * Jacklee的博客-专注于PHP技术
     * 网站地址: http://www.phpally.com
     * @author Jacklee<jack349392900@gmail.com>
     * @date 2012-03-08
     */
     
    global $_LANG;
     
    $_LANG['merID']  = '商户代码';
    $_LANG['merAcct']= '商户帐号';
    $_LANG['curType']  = '支付币种';
            
    ?>

[转载]如何修炼成大数据高手?推荐你看这些书 | 36大数据

mikel阅读(997)

[转载]如何修炼成大数据高手?推荐你看这些书 | 36大数据.

大数据

首先声明一点,千万不要以为看了这篇文章就能成为大数据高手了,不然就不会用“修炼”这个词了,要修炼成大数据高手决不是件容易的事,可以说是非常 难的一件事。要不也不会连大数据发源地——美国也不超出10个人(也许就5、6个)能达到这个层次,在中国……算了,就不说了。

这篇文章实际是给你指一条过程异常艰辛,但前途异常光明的路。没有毅力的人,看看就好了,千万别认真。(说实在的,就算要看明白这篇文章,也都不是件容易的事。)

言归正传。要想成为大数据高手,首先要从理念上彻底转变,彻底理解大数据思维,并渗透到血液和骨髓中,否则是不可能成为高手的。换句话说,你的世界观要彻底转变!(我知道,你一定会在心里心:有没有这么严重啊?)

而要实现这个转变,必须经过初级、中级和高级三个阶段的学习。

那三个阶段要怎么学习呢?下面我就会告诉你每个阶段所要用的教材,把这些书读透,你就会实现上面的转变了。

初级阶段:《大数据时代》

作者:[英]维克托·迈尔-舍恩伯格,[英]肯尼思·库克耶
翻译:盛杨燕,周涛
浙江人民出版社

大数据时代

不用说了,肯定是这本书。读完这本书,要求你形成大数据的概念,即知道这么几点:
1、绝不是有很多数据就叫大数据;
2、大数据是一种数据分析方式,与传统数据分析方式有着本质上的不同;
3、大数据的特点是“关注相关性,不关注因果”,这是大数据最核心的东西,一定要真正理解,并牢牢记住,不然你就很容易被别人忽悠;
4、大数据采用的是统计的方法;
5、大数据主要是结合人工智能进行机器的自动数据挖掘;
6、大数据主要是用来作预测的。而不是象一般的数据分析,只是分析出历史情况和现状,未来还是要靠人去预测,大数据则是直接告诉你未来的结果。

中级阶段:《失控》

作者:凯文·凯利(KEVIN KELLY),很多人都亲切地叫他KK
翻译:东西文库
新星出版社

失控

为什么是这本书呢?学完初级阶段要记住的几件事还没忘吧?对,用统计的方法,而不是因果的方法,预测未来。ok,下面我们就来看看这本书说了些啥:

第二十二章 预言机
……
在对预测机制进行剖析的时候,法默最喜欢用这个例子来进行说明:「来,接着!」他说着就朝你扔过来一个棒球。你抓住了球。「你知道你是怎么接住这个球的吗?」,他问道。「通过预测。」

法默坚信你的脑子里有一个关于棒球是如何飞行的模型。你可以采用牛顿的经典力学算式f=ma 来预测一个高飞物体的运动轨迹,但是你的大脑本身却并没有存储这样的基本物理学算式。更确切地说,它直接依照经验数据建立起一个模型。一个棒球手,成千次 观察球棒击飞棒球的情景,成千次举起戴着棒球手套的手,成千次利用戴手套的手调整他的预测。不知怎么的,他的大脑就逐渐编制出一个棒球落点的模型——一个 几乎跟f=ma 不相上下的模型,只不过适用范围没有那么广而已。这个模型完全建立在过去接球过程中产生的一系列手/眼数据的基础上。在逻辑学领域中,这样的过程统称为归 纳,它与导出f=ma 的推演过程截然不同。

……
一个棒球外野手基于经验形成的空中飞行物的「理论」,很像托勒密行星模型的后期阶段。如果我们解析外野手的「理论」的话,就会发现它是不连贯的,即兴的, 复杂的,而且是近似的。但是,它也是可以发展的。这是一个紊乱的理论,但它不仅有效,而且还能提高。如果非要等到每个人都能弄明白f=ma 这个算式(况且,弄明白半个f=ma 还不如什么都不懂)再行动的话,就根本没有人能接住任何东西。就算你现在了解了这个算式,也没什么用。「你可以用f=ma 来求解飞行中的棒球问题,但你不能在外场实时解决问题。」法默说。
……

几乎可以明确地说,「活系统」——狮群、股票市场、进化中的种群、智能——都是不可预测的。它们所具有的那种混乱的、递归式的因果关系,各个部分之 间互为因果的关系,使得系统中的任何一个部分都难以用常规的线性外推法推断未来。不过,整个系统却能够充当分布式装置,对未来做近似的推测。
……
而世界上绝大多数的复杂系统——包括所有的市场——都是非线性的。
……
在现实中,影响股票的二维图形轨迹的因素不是几个,而是数千个。
……
仅仅100 个变量,就可以创造出一群数量巨大无比的可能性。因为每一个变量行为都和其他99 个行为互相影响,所以如果不同时对这个相互作用的群体整体进行考察的话,你根本无法考察其中的任何一个参数。比如说,哪怕是一个简单的只有三个变量的气候 模型,也会通过某种奇怪的回路连回到自己身上,从而哺育出某种混沌,让任何一种线性预测都成为不可能。

——摘自《失控》

用f=ma(公式)来预测,或者说线性预测,就是通过因果推理来进行预测,即根据球的质量、加速度等等因素,找出这个球为什么会从那个地方飞到这个地方的原因;

而“归纳”即是“统计”的意思,或者说是较粗略的统计,归纳是不问原因的,接住这个球就完了,管它是什么原因。

你想成为大数据高手,你想用统计的方法来对某些东西进行预测?(我现在来预测下你心里想的某些东西是什么。股票!噢,别夸我,我只不过是归纳了很多人的想法而已。)

好了,现在你来告诉我,还有什么理由不去好好读这本书?(当然,好心如我肯定会提醒你:拿这本书一定要拿稳了,砸脚面上可不是好玩的,因为它有一块砖头那么厚和重)

高级阶段:《复杂性》

作者:[美]尼古拉斯·雷舍尔(NICHOLAS RESCHER)
翻译:吴彤
复杂性

学完中级阶段,你接触到了一件事,“复杂性”,知道了事情复杂到一定程度,就不可能用寻找因果的方法去进行预测。

那么到底什么是复杂性,它的本质和原理是什么?想成为大数据高手,你不能对此一无所知,因为你将一辈子与复杂甚至是极其复杂的事情打交道。

如果你读完了《失控》,可能此时心理在想:尼玛,《失控》这本书已经够难读懂的了(没错,要不微信老总张小龙也不会说,能读完这本书的可以直接去他 公司上班。注意他说的是“读完”,不是“读懂”),那也才是个中级,这个高级不是要把脑子都烧坏吗?(你又预测对了,和这本比起来,《失控》只能算本休闲 书)那我能不看这本书吗?它和我想学的东西到底有多大关系?(你这么不听老师话,你爸妈造吗?)

为了你这不听话的学生,老师就透露些内容吧:

不再试图根据事物如何必须按照理论的一般原理发展去解决问题,而是根据事物如何在通常的情况下按照我们能够确定的最好情况去解决问题。与其寻求抽象必然性的一般原理,不如以某种经验主义的精神,在经验——带有它的全部特征偶然性和潜在不完备性——中寻求指引。

……
被称为科学规律的牛顿世界秩序(Newtonian world order)的狂热爱好者。他们的观点是牛顿、拉普拉斯(Laplace)和达尔文的相应世界观,将世界看作自然规律的有序框架。康德主义因果关系原理 (Kantian principle of causality)是他们思维中的最重要部分,世界——自然世界和人类世界——被视为宇宙,每一个事物都是有序的、规律的、理智的、可解释的。实在被视 为某种有条理的系统,类似于有条理的花园,排列有序且有整齐的边界。

……爱因斯坦、普朗克、薛定谔(Schrodinger)及其同伴破坏了旧物理学秩序。康托尔(Cantor)、哥德尔、海丁(Heyting) 等人打破了旧的数学秩序。量子力学理论造成了因果关系的崩溃。进化论现在郑重强调的不是“适者生存”,而是自然选择不得不在其基础上发挥作用的全然随机的 平台。

……
(然而)机会和混沌的宇宙不是不守秩序的(无政府状态的),而只是复杂的,通过其自然的运转展现着更高阶规律的涌现。而当形式逻辑屈从于它的经典不变性 时,一种新的非经典的、多值的(或者“模糊的”)逻辑业已诞生并取而代之。确定性(certainties)也有效地被或然性 (probabilities)和似真性(plausibilities)所取代。
……
鉴于在复杂世界中对行动过程做出理智选择难免是困难的……如果我们是相信统计学结论的学者,用概率统计推断行为的正确性,那么事情就变得更容易处理。

——摘自《复杂性》

好了,读还是不读,你自己看着办吧。

对了,推荐这本书还有个原因。大家都知道大数据是研究数据的相关性,即找出数据之间的关系。当我经历了15年统计学人工智能数据相关性的探索和研 究,感觉已经研究得差不多了,但又觉得要解决所有的问题还有不小的距离,这时就感到很迷茫,不知下一步的研究该往何方去,有种路越走越窄的感觉,又有一种 达到顶峰的幻觉,直到看到这本书中的一句话:

“可以考虑它们的关系,再考虑这些关系中的关系,如此下去。”

当看到这句话,用醍醐灌顶已不足以形容我当时的感受,简直就是五雷轰顶。就好象原来我以为世界只有自家的一亩三分地,这句话如一道划破夜空的明亮闪 电,让我突然看到了无限广袤的宇宙,为我指明了方向,并开辟出一条金光大道。(原谅我用了这么多的有点乱的形容,每当想起这句话,我就抑制不住激动的心 情)现在想起来,自己那达到顶峰的幻觉是多么幼稚可笑啊,可笑还不在于我没有达到顶峰,而在于这世上本没有顶峰(挺具有佛性的一句话,不由得让我想起六祖 的话:菩提本无树,明镜亦非台,本来无一物,何处惹尘埃)。

大家千万不要小看这句话中的“如此下去”几个字,他指明了一个无穷叠代,即 “关系的关系的……关系”,而智能将在这里涌现,解决复杂性问题预测的关键很可能就在这里,这句话打开了一个非常广阔的前景,将象宇宙一样没有穷尽。

看完这句话后,待心情稍稍平复,我立即把它写成一个函数:

x=f(f(a,b),f(c,d))

然后告诉自己:这就是你后半生要去全力研究的东西!

现在我们接着往下讲,还记得我一开始说过要转变世界观吗?读完这三本书,你已经做好了世界观转变的准备,现在就要来最后一击,完成这个转变!

也就是说,高级阶段你还要读一本书(尼妹,还要不要人活?我帮你说了)。你已经了解了复杂性的原理,但这个世界到底有多复杂,你可能还没有感性的认 识。你一定觉得自己经历过很多非常复杂的事,比如你炒过股票、管理过几百上千人、研究过社会学问题等等,但是和这个世界真正最复杂的事比起来,这些都不过 是小儿科。

也许你已经猜到了是什么方面的书,对,量子理论。鉴于这个理论实在太难、太复杂,爱因斯坦致死也没把它搞明白,科学家们现在也都还没把它搞明白,我 辈就不用费神想去把它真正搞懂了,但由于我们是在探求事物的复杂性,或者也可以说研究事物的本质,那么不可不对此有所了解,因此我给大家的书是这方面的最 初级的科普读物。(实在不忍心再吓你们了。

高级阶段(2):量子物理史话

作者:曹天元(没错,中国人)
辽宁教育出版社
大数据书籍

你一定有疑问,“这本书就能让我改变世界观?”

那么我们就来看看书中说些什么吧:

量子世界的本质是“随机性”。传统观念中的严格因果关系在量子世界是不存在的,必须以一种统计性的解释来取而代之,波函数ψ就是一种统计,它的平 方代表了粒子在某处出现的概率。当我们说“电子出现在x处”时,我们并不知道这个事件的“原因”是什么,它是一个完全随机的过程,没有因果关系。

……
因果性必须死,因为物理学需要生!

停止争论吧,上帝真的掷骰子!随机性是世界的基石,当电子出现在这里时,它是一个随机的过程,并不需要有谁给它加上难以忍受的条条框框。……而统计规律则把微观上的无法无天抹平成为宏观上的井井有条。

——摘自《量子物理史话》

“统计规律则把微观上的无法无天抹平成为宏观上的井井有条”,这句话实际上就是表明,统计方法可以使极其复杂的随机事件成为可预测。我认为,社会、 市场、股票等等与量子世界有着很多相似之处。由于量子理论实际上是从最本质上去研究我们存在于其中的这个世界,因此正如书中的一句话:

“这个世界的本质:它本就是统计性的!

如果你用根深蒂固的唯物主义思想(认为唯心主义绝对是错的)去看量子理论,那么你可能很难理解它,而带着对唯心主义一定程度的理解(不一定非要完全赞同) 去看会非常有帮助。因此,我在这里建议大家也可以了解一些佛学,比如看看净空法师说的话,这样会有助于你站在唯心主义的角度去看问题。

不是幡动,也不是风动,而是心动。

佛说:极微细的心动一下,宇宙就出现,森罗万象都现前,同时我也出现了。心动,分三段,第一它动,一动就变,一转变就成能 见相,有能见立刻就有所见,所见就出现。能见就是意识,意识出现后,立刻就有所见,即物质出现,故物质是幻象,你想它就现相,物质现相即宇宙,故宇宙的现 前是顿现,不是进化的。

——摘自《净空法师说华严经》

量子物理学家说:“意识”使得一切从量子叠加态中脱离,成为真正的现实。即第一个有意识的生物的出现才使得从创生起至那一刹那的宇宙瞬间成为现实,“意识”的参与可以在那一刻改变过去,而这个“过去”甚至包含了那个有意识的生物自身的演化历史。

——摘自《量子物理史话》

感觉到量子理论有多复杂了吗?如果你对上面两段很绕的话没太看明白,我给你个精简版本:

佛说:心动,宇宙就出现,森罗万象现前,同时我也出现;

量子物理学家说:意识使一切从量子叠加态中脱离,使宇宙历史瞬间成现实,其中含有那意识生物自身。

你肯定还是觉得无法理解这些话,没关系,你只需明白一件事就行了,佛祖在两千多年前就预言了量子物理学家现在要说的话。

好了,等看完这本书,你的世界观不改变,你来找我请你吃饭。

另外,还有一本书作为参考书可以读一读(别骂我,参考书,不一定非要读),侯世达(Douglas, R. Hofstardter)的《哥德尔、艾舍尔、巴赫》(比砖头还厚,《失控》只是和砖头一样厚)。

此书的介绍:本书是在英语世界中有极高评价的科普著作。曾获得普利策文学奖。它通过对哥德尔的数理逻辑,艾舍尔的版画和巴赫的音乐三者的综合阐述, 引人入胜地介绍了数理逻辑学、可计算理论、人工智能学、语言学、遗传学、音乐、绘画的理论等方面,构思精巧、含义深刻、视野广阔、富于哲学韵味。

数理逻辑学、可计算理论、人工智能学、语言学,这些对你后面要学的东西是有帮助的。

推荐这本书的另外一个原因是,《复杂性》这本书引用了它的内容。

除了《大数据时代》,推荐以上这些书还有一个共同的原因,那就是这些书的作者可以说都是预测的高手(佛祖的功力你刚才已经领教了),让人实在佩服得五体投地。

《失控》写于20年前,据说是史上唯一一本历经20年越来越好卖的书,原因就是人们发现20年前书中说的事,这些年来正在一件件地被实现,人们都在奇怪,KK他是怎么知道的。

《复杂性》也写于近20年前。

《哥德尔、艾舍尔、巴赫》写于30年前。

《量子物理史话》虽然是2008年写的,但是量子理论诞生一百多年了。

《华严经》诞生于两千多年前。

然而它们竟然对今天的大数据有如此的指导意义,我还能说什么?

《复杂性》的作者尼古拉斯·雷舍尔还有一本书(还有?!),别急,这本书你一定会很想看,因为书名干脆就叫《预测未来》。可惜,这本书没有中文版,英语好的同学可以去国外找来看看,如果你能帮我也弄一本,俺将不胜感激!

现在你已转变了世界观,具备了成为一个大数据高手的思想,可以开始学习具体方法了,即学习人工智能。

你一定在想,是不是又要读一大堆书?理论上说:是的,需要学习人工智能基础、自然语言处理、机器学习、统计学人工智能等等。不过,看你们被虐了这么久,我也动了恻隐之心,将给你们指一条捷径,就学习一本书(高兴吧?)。

统计自然语言处理基础

作者:[美]Christopher D. Manning [德]hinrich Schutze
翻译:苑春法 李庆中 王昀 李伟 曹德芳等
电子工业出版社
统计自然语言

你可能有一个疑问,为什么是“语言”,这有两个原因:

第一,在计算机专业,数据并不仅仅是指数字,文字、图片、声音、视频等都叫数据;

第二,语言比数字难很多,如果你能处理语言,那处理纯数字就容易很多。(可参看我的另一篇文章,“什么是真正的大数据”,http://www.36dsj.com/archives/7828

你可能还有一个疑问,统计自然语言处理与一般的自然语言处理有什么本质不同之处?

给你讲一个有趣的事,我的一个侄儿,4岁左右,一次去机场第一次看见自动人行道,就是类似商场那种自动扶梯,只不过是放平的,人站在上面就自动往前走,他脱口就说出“平电梯”。很形象,是不是?他之所以能造出这个词,就是因为人有智能。

这里就引出一个小问题,他为什么会把“平”字放在“电梯”的前面?如果用人工智能的一般自然语言处理来解决这个问题,就会从词性、语法、句法等方面 着手,中学的时候你一定学过什么偏正结构、主谓结构、动宾结构等等吧?对,经过这一翻分析和处理,找出原因并推导出结果,可能就会知道“平”字应该放在前 面;

然而统计自然语言处理的路数不同,经过统计,“平”字大多数时候都是放在前面,比如平均、平等、平台、平的、平时、平坦、平常、平衡、平移、平板电脑……,好吧,那就把“平”字放在前面吧。嗯,就这么简单。

当然,这里只是打个比方,实际不会是这么简单。

但是,这又引出一个问题,我们仔细想想,那个4岁的小孩是怎么处理的,难道他懂什么语法、句法、编正结构吗?肯定不是,所以他一定是用的归纳统计的 方法,无数次听到大人说到类似词时都是把平放在前面,所以他就放在前面了,他才不知道是什么原因呢,和接那个棒球是一个道理,他的大脑里并没有那个物理公 式。

因此,统计自然语言处理是更接近自然的自然语言处理方式(绕口令?),也就是说更接近我们人的处理方式,甚至可以说就是人或自然的处理方式,只是人的大脑处理方式更复杂而已,但本质是一样的。

关于这一点,也有不同看法,我把不同观点也呈现给你,你可以自己去思考和判断。著名语言学家乔姆斯基就认为“儿童被假定为天生具有适用于所有人类语言的基本语法结构的知识,这种与生俱来的知识通常被称作普遍语法理论。”(摘自百度百科)

自然,我本人是很难苟同这种观点。这一观点也遭到相当一部份语言学家的反对,“认为在尚未对所有人类语言进行研究之前就假设所有人类语言有共同的 ‘底层语法’,这样做太冒进;而且在应用普遍语法研究未知语言时,不得不假设许多‘空白词类’,在研究基本语法为‘谓主宾’的语言(如爱尔兰盖尔语)时, 更不得不假设这些语言的‘底层基本结构’为主谓宾,这种做法本身可能已经违反了描述性原则。也有语言学家(如Michael Evans和Stephan Levinson)主张,普遍语法是基於种族中心主义而得出的假设,而这会对认知科学造成很不良的影响。”

(摘自百度百科)

读完了这本书,不代表你就成为大数据高手了,实际上它只是为你打下基础知识,真正掌握大数据的方法,需要你在这个基础上去探索或者说悟出来。

至此为止,师父领进门、修行在个人,GOOD LUCK!

我写这篇文章其实有两个原因,一个就是为想成为大数据高手的人指一条路;

另一个原因,就是想做一个反击,对反对大数据、怀疑大数据、用小数据当大数据忽悠的人进行反击。注意,我这里绝对没有反对小数据的意思,大数据并不 是万能的,传统数据分析方式、抽样数据分析仍然是非常有用的,或至少在相当长的时间里是如此,我只是反对现在很多人把传统数据分析方式当作大数据方式来忽 悠大众。如果把这反击浓缩成一句话,那就是:

这个世界的本质是统!计!的!

作者:玻尔兹曼大脑的放逐,大家可以关注他的微博http://weibo.com/aizhuangjia 

扫描微信下面二维码,随时了解大数据最新动向,添加36大数据官方微信公共帐号dashuju36:

二维码

[转载]快看! 那些为用户带来惊喜的小细节-情感化设计小议(1) | 微价值

mikel阅读(891)

[转载]快看! 那些为用户带来惊喜的小细节-情感化设计小议(1) | 微价值.快看! 那些为用户带来惊喜的小细节

   hi,大家好。在这个初夏的夜晚,静电想跟大家分享一下最近在使用APP产品中遇到的那些让人惊喜或者眼前一亮的小东西。对于一个普通的使用者来说,当 他不断的,反复的使用一款软件时,说明这款软件已经足够受他们欢迎,我们每天不时的刷着朋友圈;打开各种音乐软件,用手机听着音乐;用手机淘宝躺在床上, 挑选自己喜欢的宝贝。我们大家都听过一个词,用户留存率,这代表用户是否喜欢你开发的软件,或者只是打开了一次就束之高阁或者直接扔到垃圾箱,如果你的软 件用户留存率还不错,那么,恭喜你,但不要高兴过早哦。慢慢的,你会发现,我们的软件数据曲线像一条缓缓的山坡,慢慢的越走越低。我们急的抓耳挠腮,始终 找不到原因所在。这时,我们还会听到一个词,喜新厌旧。
     对,喜新厌旧,这时多么让人深恶痛绝的词啊。但,作为人类的我们,始终无法摆脱这个魔咒,要不怎么说呢,夫妻之间还会有七年之痒,对吧? 怎么破?
     静电认为,用户与app的关系,与人与人的关系有非常多的相似之处。
     1. 用户认为app能为我们带来某些价值(两个人偶尔认识并认为对方能为自己带来某些价值或利益)
     2. 开发者因为app受欢迎而持续更新,开发新功能满足用户(双方开始喜欢上对方,进而努力工作或做其他事情,以跟上对方的步调)
     3. 升华一下,使用者因为使用app而对这款app以及这款app所创造的价值观产生认同(经过一段时间的相处,双方互相认同对方的价值观)
     4. 用户因认同app所传达的价值观进而成为开发者和app的粉丝,或者成为朋友(双方建立牢固的爱情或者友谊)
     5. 用户因为喜欢这款app进而喜欢上这个开发者开发出的其他产品(双方因为喜欢对方进而喜欢对方身边的其他事物,人)
     好吧,把app与用户的关系比作两个人相互认识然后相处的关系过程,不知道大家是否觉得唐突。但认识久了,总是归于平淡,我们需要通过一系列的方法来让用户保持新鲜感。作为情感化设计的一个环节,今天我们先来看看他们是怎么做的。
     首先是微信,相信这个功能大家都已经知道了,不过,如果不是别人提醒,当我们在使用微信的时候,第一次发现,说不定会高兴小一会儿呢,呵呵。
     微信朋友圈的隐藏功能
     第二个是QQ音乐,静电最常用的音乐软件。昨天听歌的时候发现的,说真的,看到这个就感觉像发现新大陆的感觉,赶紧分享到朋友圈和微博了。
     qq音乐客户端的隐藏功能
       第三个是大众点评。说说我发现这个的场景,静电昨天中午要和小伙伴聚餐,需要订一个包间,然后就使用了大众点评的预定功能。但 是,静电使用的时候,网络环境不是太好,结果,就是下图这样了(文案除了整理包房,还有“掌柜确认”,“服务员列队欢迎”),在网络环境不好的时候,看到 这个,焦躁的情绪没有了,取而代之的,反而是一刻会心的微笑。
     大众点评的贴心提示
      第四个,百度魔图。像下图这样的评价弹出框,相信很多app都会有。但如此卖萌,好的,现在卖萌的那么多,我们也习惯了,静电照例点下残忍拒绝,那么接下来。。。
百度魔图很爱你
 百度魔图很爱你
      百度魔图你这么爱我,艳红知道么?
     接着是淘宝客户端,这也是静电使用频率非常高的一款软件。这里提一个很小的细节,当我们的网络从wifi切换到3G的时候,淘宝客户端会做出提醒,目的 推测是为了提醒用户,3G网络下会消耗运营商流量或者加载速度较慢,但作为一款如此高大上的客户端,淘宝肯定不会直白的说,我们在3G网络下打开速度可能 很慢啊,那么,就提醒一下用户网络环境变化了就好了。另外,还有一个细节,用户在3G切换到wifi环境下,不会出现如此提示,为啥?因为,没必要……
     淘宝的网络状态切换提示
      最后,爆一个手机QQ(ios版本)的一个好玩的功能,大家在和小伙伴们聊天的时候,再也不会撞到电线杆或者踩到便便啦, 多么贴心的小功能。
     手机qq客户端隐藏功能
       好的,以上就是静电在亲身使用过程中遇到的一些好玩的细节,大家千万不要小看这些小细节哦,有句话说的好,细节决定成败,app每时每刻的动作,与我们的 交互,都影响着用户的好感度。这就好像在和人相处过程中,你的每一个举止,都会关系到与你相处的人的印象一样,不管是突然给人惊喜,让用户成就感大幅飙 升,还是时刻温柔体贴,无微不至的顾及着用户的感受,所有这些宗旨只有一个,和你的用户做朋友,用你的真心来打动每一个使用者,让他们真正成为你产品的簇 拥者。
      关于情感化设计,静电还会在以后的文章中继续和大家深入讨论,敬请期待。
      如果你有什么好的意见和建议,或者在使用产品中发现了什么好玩的细节,也欢迎你和静电交流,静电的邮箱是 hixulei#gmail.com(将#换成@) ,期待你和静电联系,让我们成为好朋友。

转载请注明:微价值 » 快看! 那些为用户带来惊喜的小细节-情感化设计小议(1)

[转载]产品经理常用的四种需求收集方法简述 - 产品经理西蒙 - 博客园

mikel阅读(989)

[转载]产品经理常用的四种需求收集方法简述 – 产品经理西蒙 – 博客园.

A 客户访谈

客户访谈是通过面对面的交流方式了解具体客户对产品、对流程的需求、观点和看法。

客户访谈的内容可以包括:

1、了解哪些需求对客户比较重要。

2、就了解到的一些需求请客户协助进行优先排序。

3、就问题改进建议的初步想法与客户进行讨论,确认是否能够满足客户需求。

客户访谈的优点包括:

1、由于是面对面的交流,因此在调查内容上更加灵活,可以随时根据问答状况就一些内容进行深入讨论,获得更多的客户感受。

2、客户可以再调查人的协助下,进行一些较为复杂的问卷调查。

3、客户访谈方式的适用面广,可以覆盖所有类型的人群,尤其是可以覆盖一些其他方法很难活无法覆盖的人群。例如,对于一些专 业人士,我们可以通过调查问卷的方式征集客户需求,而对于一些非专业人士,他们可能对一些深入调查内容不甚了解,使用问卷调查无法获得正确的客户需求。但 是,通过客户访谈方式与客户深入沟通和交流,就能获取这些客户的需求。

但是,客户访谈也具有一些无法回避的缺陷,在使用的时候需要多加注意,这些问题主要包括:

1、由于是面对面的交流,因此获取客户需求的成本较高。

2、在访谈过程中,调查人的一些观点有可能影响或误导客户的观点。因此,在访谈时应多注意倾听外部客户之声,尽量减少或避免发表对需求的看法。

3、由于面对面的交流是一项非常耗时的调查方式,很可能由于样本量不足,导致难以形成可量化的优化需求证据。因此,尽量使用多种调查方式采集客户需求,相互印证、补充,是正确的客户需求调查方式。

焦点小组讨论

焦点小组是从客户群中挑选出一组具有代表性的客户,通过集体座谈的方式收集整理所反映的意见。焦点小组可以作为客户访谈的后续步骤、问卷调查的预备步骤,通过集体的力量,对前期收集的客户需求进行澄清、确认,对需求的优先排序进行更深入的了解。

使用焦点小组讨论时,主持人要掌握好讨论的节奏,并且要使参与者在一中轻松、开放、自然的氛围中进行讨论。进行焦点小组讨论的注意事项包括:

1、参与讨论人员不宜过多,一般在7-13人;

2、就座谈话题而言,参与者应当具有相同的特征;

3、讨论的时间一般控制在2-4小时;

4、为确保就话题能够进行深入的讨论,事先准备的问题不宜过多。

问卷调查

通过问卷可以调查客户的需求、拟改进需求的重要程度,以及拟改进需求能否满足客户要求等问题。当然,也可以通过问卷调查客户对现有状况的满意度。

问卷调查的首要特点是调查的客户数量大。问卷调查通过大量的数据来佐证客户需求的准确性,因此不会出现像客户访谈那样的观点 误导,从这个角度讲,问卷调查属于定量分析,而客户访谈和焦点小组讨论属于定性分析。其次是问卷调查具有低成本的特点。当然,问卷调查也会因客户不积极配 合,出现回应率低或回答草率等问题,在这种情况下,可以在调查时适当配发一些小礼品、电子货币等来调动客户的参与积极性。

网站分析而言,问卷调查可以是线上调查,也可以是线下调查,还可以通过发送邮件的方式进行调查。

头脑风暴

头脑风暴又称畅谈法、集思广益法、智力激励法,是采用会议的方式搜集人们对有关议题的想法和观点,是一种利用集体智慧的创造性思维方法。

头脑风暴通常用于内部用户的需求征集、分析。此外,该方法在网站优化过程中还广泛应用于分析原因和查找问题解决方案。

头脑风暴法是通过一定的讨论程序和规则来保证创造性讨论的有效性,因此,讨论程序成了头脑风暴法能否有效实施的关键因素。组织讨论程序的关键环节如下所示:

环节:

确定议题——会前准备——确定人选——明确分工——规定纪录——掌握时间——归纳整理

确定议题:

首先要有一个对问题的准确阐述,使与会者明确通过这次会议需要解决什么问题,同时不要限制解决方案的范围。一般而言,比较具体的议题能使与会者较快产生设想,主持人也较容易掌握;比较抽象和宏观的议题引发设想的时间较长,但设想的创造性也较强

会前准备:

为了提高头脑风暴会议的效率,可收集一些资料预先给大家参考,以便与会者了解与议题有关的背景材料和外界动态。就参与者而 言,要一定对解决的问题有所了解。会场可做适当布置,座位排成圆环形的环境往往比教室式的环境更为有利。在头脑风暴正式开始前可以出一些创造力测验题,供 大家思考,以便活跃气氛,促进思维

确定人选:

一般以8-12人为宜,人数太少不利于交流信息、激发思维,人数太多则不容易掌握,并且每个人的发言的机会相对减少。

明确分工:

要推定一名主持人,1-2名记录员。主持人非常关键,必须有丰富的经验,能够烘托现场气氛,及时归纳某些发言的核心内容,引导参会者进行主动思考,积极参与讨论;记录员应将与会者的所有设想都及时编号,简要记录,最好写在黑板等醒目处,让与会者能够看清

规定记录:

根据头脑风暴的原则,与会者应积极投入,不消极旁观;不要私下议论,以免影响他人的思考;发言要针对目标,开门见山,不要客套;与会者之间相互尊重,平等相待,切记相互褒贬

掌握时间:

会议时间由主持人掌握(一般有PM主持),不宜在会前定死。一般来说,以及时分钟为宜。时间太短与会者难以畅所欲言,太长则容易产生疲劳感,影响会议效果。经验表明,创造性较强的设想一般会在会议开始10-15分钟后逐渐产生

归纳整理:

在会议最后,应把所有观点宣读一边,保证每个与会者的意见都被充分表达;对见解进行整理,相同观点只保留一个,删除无关意见;讨论各个见解的科学性、实用性和可行性;对所有见解进行归纳和分类。

(归纳整理方法我会在以后讲)

要成功实施头脑风暴除了在程序上的要求外,更为关键的是创造一种可以轻松的、非评价性的、无偏见的交流环境,主要有以下几项需要注意。

1、自由畅谈。之所以风暴,与会者就应放松思想,不受任何条条框框限制,让思维自由驰骋。从不同角度、不同层次、不同方位,大胆地展开想象,尽可能地标新立意,与众不同,提出独创性的想法。

2、延迟评判。之所以风暴,必须坚持当场不对任何设想做出评价的原则。既不能肯定某个设想,又不能否定某个设想,也不能对某 个设想发表评论性的意见。一切评价和判断都要延迟到会议结束以后才能进行。这一方面是为了防止评判约束与会者的积极思维,破坏自由畅谈的有利气氛;另一方 面是为了集中精力先开发设想,避免把应该在后阶段做的工作提前进行,影响创造性设想的大量产生。

3、禁止批评。这是头脑风暴应该遵循的一个重要原则。与会者不得对别人的设想提出批评意见,以为批评对创造性思维会产生抑制 作用。同时,发言人的自我批评也在禁止之列,遇到这种情况主持人应对其积极鼓励。有些人习惯于用一些自谦之词,这些自我批评性的做法同样会破坏会场气氛, 影响自由畅想。

4、追求数量。头脑风暴会议的目标是获得尽可能多的设想,追求数量是它的首要任务。参加会议的每个人都要抓紧时间多思考,多提设想。在某种意义上,设想的质量和数量密切相关,产品的设想越多,其中的创造性设想就可能越多。

5、选择适当的调查方法

方法决定结果,在调查的各个时段选择正确的调查方法至关重要。客户访谈、焦点小组讨论、问卷调查三者基本上是一种层次递进关 系,上一个方法的调查结果是进行下一个方法的调查基础,而头脑风暴是征集内部用户需求的重要工具。当然,如果问题比较直观,需求比较明确,那么几种方法可 以同时进行。

调查方法的选择方法

当没有掌握需求时,可选择的调查方法:客户访谈、焦点小组讨论、头脑风暴

调查结果:初步了解客户的需求,但是尚未对需求进行澄清,也未确定需求的优先级,仅仅是知道了需要关注哪些方面

已预先了解到客户需求,可选择的调查方法:客户访谈、焦点小组讨论、问卷调查、头脑风暴

调查结果:已经澄清需求,并对需求的优先级进行了初步排序,此阶段应了解到需要重点解决哪些需求

已区分优先级的客户需求,可选择的调查方法:问卷调查

通过大量的问卷,用数据说话,得到被客户普遍认可的客户需求的优先级

[转载]如何构建日均千万PV Web站点(二) 之~缓存为王~ - 姜明则 - 博客园

mikel阅读(901)

[转载]如何构建日均千万PV Web站点(二) 之~缓存为王~ – 姜明则 – 博客园.

随着网站业务的不断发展,用户的规模越来越大;介于中国无比蹩脚复杂的网路环境;南电信;北联通;中间竟然只用一条链路进行互联通信!有研究表明,网站访 问延迟和用户流失率正相关,网站访问速度越慢,用户越容易失去耐心而离开。为了提高更好的用户体验,留住用户,网站需要加速网站访问速度。如今主要的手段 只有使用CDN和反向代理了;此时网站的架构应该是这样的:

1、使用CDN和缓存服务器;CDN和反向代理的基本原理都是缓存数据,区别就在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可 以从距离自己最近的网络提供商机房获取数据;CDN的网络环境很复杂;所谓的多重负载均衡架构模型;不过它们一般会使用DNS作为全局负载均衡器;高效, 并且能够根据客户端的源IP地址,来判断客户端的来源地区;将客户端的请求分配制本地负载均衡器;CDN架构图如下:从下图中可以看到,第一层GSLB和 第二层GSLB都有各自的域组,第一层GSLB通过区域设置,将整个服务池分为电信的服务池和联通的服务池,第二层GSLB通过区域设置,将电信的服务池 分为各省的服务池。这里的服务池就是提供相同业务的所有POP节点的组合,各省的服务池包含两个POP节点,POP节点也是GSLB在调度配置中所认识到 的虚拟服务器.GSLB通过负载均很策略最终返回一个POP节点地址,用户直接访问POP节点来获取网站缓存内容。

 

而反向代理则部署在网站的中心机房中,当用户请求到达中心机房中后,首先访问的服务器就是反向代理服务器,如果反向代理服务器ui中缓存着用户请求 的资源,就将其直接返回给用户。使用CDN和反向代理的目的都是尽早返回数据给用户,一方面加快用户的访问速度,另一方面也减轻了后端服务器的负载压力;

2、分布式数据库;分布式数据库是网站数据拆分的最后手段,只有在表单数据规模非常庞大的时候才使用;

3、服务器推送;将应用程序服务器;以及缓存服务器全部推送到运营商机房中;

4、NoSQL以及搜索引擎的引入;随着网站的业务越来越复杂,对数据的存储和检索需求也越来越复杂,这时网站就必须得引入一些非关系型数据库技术如NoSQL(MongoDB, 对于大数据量、髙并发、弱事务的互联网应用, MongoDB则是一个如瑞士军刀般的利器。尽管我不认同MongoDB会在所有场合完全取代MySQL,但我相信它完全可以满足Web 2.0和移动互联网应用的数据存储需求。MongoDB内置的水平扩展机制提供了从百万到十亿级别的数据量处理能力,其开箱即用的特性也大大降低了中小网 站的运维成本),以及非数据库查询技术如搜索引擎;NoSQL和搜索引擎对可伸缩的分布式特性具有更好的支持。因此,此时的架构模型就如下图所示:

Nginx 反向代理配置:

user                              nobody nobody;
worker_processes                  4;
worker_rlimit_nofile              51200;

error_log                         logs/error.log  notice;

pid                               /var/run/nginx.pid;

events {
  use                             epoll;
  worker_connections              51200;
}

http {
  server_tokens                   off;
  include                         mime.types;

  proxy_redirect                off;
  proxy_set_header              Host $host;
  proxy_set_header              X-Real-IP $remote_addr;
  proxy_set_header              X-Forwarded-For $proxy_add_x_forwarded_for;
  client_max_body_size          20m;
  client_body_buffer_size       256k;
  proxy_connect_timeout         90;
  proxy_send_timeout            90;
  proxy_read_timeout            90;
  proxy_buffer_size             128k;
  proxy_buffers                 4 64k;
  proxy_busy_buffers_size       128k;
  proxy_temp_file_write_size    128k;

  default_type                    application/octet-stream;
  charset                         utf-8;
  
  client_body_temp_path           /var/tmp/client_body_temp 1 2;
  proxy_temp_path                 /var/tmp/proxy_temp 1 2;
  fastcgi_temp_path               /var/tmp/fastcgi_temp 1 2;
  uwsgi_temp_path                 /var/tmp/uwsgi_temp 1 2;
  scgi_temp_path                  /var/tmp/scgi_temp 1 2;

  ignore_invalid_headers          on;
  server_names_hash_max_size      256;
  server_names_hash_bucket_size   64;
  client_header_buffer_size       8k;
  large_client_header_buffers     4 32k;
  connection_pool_size            256;
  request_pool_size               64k;

  output_buffers                  2 128k;
  postpone_output                 1460;

  client_header_timeout           1m;
  client_body_timeout             3m;
  send_timeout                    3m;


  log_format main                 '$server_addr $remote_addr [$time_local] $msec+$connection '
                                  '"$request" $status $connection $request_time $body_bytes_sent "$http_referer" '
                                  '"$http_user_agent" "$http_x_forwarded_for"';

  open_log_file_cache               max=1000 inactive=20s min_uses=1 valid=1m;

  access_log                      logs/access.log      main;
  log_not_found                   on;


  sendfile                        on;
  tcp_nodelay                     on;
  tcp_nopush                      off;

  reset_timedout_connection       on;
  keepalive_timeout               10 5;
  keepalive_requests              100;


  gzip                            on;
  gzip_http_version               1.1;
  gzip_vary                       on;
  gzip_proxied                    any;
  gzip_min_length                 1024;
  gzip_comp_level                 6;
  gzip_buffers                    16 8k;
  gzip_proxied                    expired no-cache no-store private auth no_last_modified no_etag;
  gzip_types                      text/plain application/x-javascript text/css application/xml application/json;
  gzip_disable                    "MSIE [1-6]\.(?!.*SV1)";


  upstream varnish  81 {
    least_conn
  
    server                        172.16.100.103:81 weight=1 max_fails=2;
    server                        172.16.100.104:81 weight=1 max_fails=2;
    server                        172.16.100.105:81 weight=1 max_fails=2;
  
  }

  server {
    listen                        80;
    server_name                   www.firefox.com;
    # config_apps_begin
    root                          /data/webapps/htdocs;
    access_log                    /var/logs/webapp.access.log     main;
    error_log                     /var/logs/webapp.error.log      notice;

    location / {
    
      location ~* ^.*/favicon.ico$ {
        root                      /data/webapps;
        expires                   180d;
        break;
      }
    
      if ( !-f $request_filename ) {
        proxy_pass                http://tomcat8080;
        break;
      }
    }

    error_page                    500 502 503 504  /50x.html;
      location = /50x.html {
      root                        html;
    }
  }

  server {
    listen                        8088;
    server_name                   nginx_status;

      location / {
          access_log                  off;
          deny                        all;
          return                      503;
      }

      location /status {
          stub_status                 on;
          access_log                  off;
          allow                       127.0.0.1;
          allow                       172.16.100.71;
          deny                        all;
      }
  }

}

[转载]【ZZ大神】让你的app增加几倍收入的产品思想(三)

mikel阅读(1118)

[转载]【ZZ大神】让你的app增加几倍收入的产品思想(三).

      HelloeverybodyzZ经过很长一段的时间的休整,终于想到了今天的主题。请让我娓娓道来。

 

Stroy Time

 

        灿烂的阳光透过树叶间的缝隙,在枝繁叶茂的大树底下,留下一个个深深浅浅的光斑,小Z在树下静静的等着小L,偶尔有一两个学生从小Z身边走过,踩在枯黄的树叶上,发出窸窸窣窣的声音。今天,Z和小L相约去图书馆学习,可是不知道为什么小L迟迟没有出现,看着去逐渐变多的人群,小Z有点点急了,正准备打电话的时候,小L突然从小Z背后跳出来,这是像精灵一样儿的女孩儿L笑眯眯的说到:你今天很乖,奖励你的。说着递来一个礼品盒。小Z被搞得一愣,旋即感到意外的惊喜。小Z傻傻的问:为什么给礼物?L看着小Z脸上透着点点调皮的神色,闪亮的眼睛转了转说:因为,你乖啊,但是具体为什么?我不告诉你~~”,突然小L抓起小Z的手不给小Z继续说话的机会,向图书馆跑去。路上只是留下一连串踩树叶的声音,逐渐远去,当然还有2个人嬉闹的笑声。

 

各位同学,就又有疑问了,zZ你不是来讲恋爱故事的吧,当然不是了,我就是给你们一个例子。相信surprise大家都在生活中有所体验,那种惊喜让人一整天一整天都心情都很舒畅,再如:老板突然发放奖金,然后留下一句,大家最近都很努力的话,恐怕大家会很积极的去工作吧。surprise每个人都喜欢但是,各位想过surprise是否可以出现我们的作品中呢?

 

Theory Time

 

 

        对生物学有一点点了解的同学都应该知道,条件反射这个词。具体我就不描述了,自行百度百科。(操作性条件反射论)

        zZ就来讲一下斯金纳的实验,研究不同频率、不同方式的强化(奖励)对动物行为是否有影响的实验

        将一只老鼠放进一个有横杠的笼子里,每次只要它按下横杠就能吃到东西,食物就是一种强化物(在我们的软件中可以应对各种奖励道具)。但是,如果老鼠每次按下横杠不一定就能得到食物,情况又会如何    呢?那就测试了不同的情境,发现奖励食物的频率和方式(基于时间间隔还是按压横杠的次数)会影响老鼠按横杠的频率。以下是4种不同的强化(奖励)方式。

       固定间隔 基于固定的时间间隔给老鼠强化。

            变化间隔 基于不同的时间间隔给老鼠强化,但时间间隔的平均值等于固定时间间隔。

            固定次数: 基于按压横杠的次数给老鼠强化,按压次数是固定的。

            变化次数: 基于按压横杠的次数给老鼠强化,按压次数是变动的,但所有次数的平均值与固定次数相等

 

 

    解释一下就是: 

              固定间隔:就是每五分钟给老鼠一次食物。

              变化间隔:就是时间随机 可能是2分钟给一次,也可能是7分钟一次,只要最后平均时间是5分钟一次就好了。

              固定次数:比如都是按20下给一次。

              变化次数:可能是5次给一次,可能是30次给一次,保证平均是20次就好

根据实验结果就是,变化的奖励是最好的效果,老鼠的按压次数最多。看到这里我相信大家应该能了解到了— 变化的奖励(我叫它surprise)。

 

 

Apply Time

 

        变化的奖励经常出现在生活当中,比如:老虎机。

        老虎机就是典型的变化奖励,你不会知道你那一次能赢钱,这个和时间没有关系,但是你知道你玩的次数越多,你就越可能遇到赢钱的时候。而你越玩,老板就越赚钱。

 

        同样,有些网站有这样儿策略就是你去完成某一样任务得到奖励,这个叫做固定奖励。或者持续刺激。

        用最常见的邀请好友奖励金币,来举例。一般的网站都是邀请一个奖励一个。但是根据斯金纳实验指出,如果是每邀请3-5个后便给予更多的奖励,可能会产生更好的效果。

 

Summary Time

           但是,想要实现这个效果,那么要注意一个问题就是,你确定你所奖励的东西是用户想要的东西。动物是需要食物,那么你的用户需要什么?

        另一个问题这个效果用在什么地方? 用在需要用户重复进行的任务上。

[转载]如何构建日均千万PV Web站点 (一) - 姜明则 - 博客园

mikel阅读(963)

[转载]如何构建日均千万PV Web站点 (一) – 姜明则 – 博客园.

其实大多数互联网网站起初的网站架构都是(Linux+Apache+MySQL+PHP). 不过随着时代的发展,科技的进步.互联网进入寻常百姓家的生活。所谓的用户的需求,铸就了一个个互联网大牛; http://www.trueland.net/IndustryNews/gjszl.shtml 近日研究机构we are social发布了《2014年全球社会化媒体、数字和移动业务数据洞察》,公布了其对全球互联网、关键社交、数字化业务和移动应用的统计数据。报告指出全球数字化业务正以惊人的趋势保持高速增长,而促使这一发展趋势的正是多屏移动设备的推动。
全球数据概览

  全球数据概览

报告指出,目前,全世界互联网人口总数已达25亿,这是一个保守估算,按照国际电信联盟(ITU International Telecommunications Union)估算,全球互联网用户数量可能已接近30亿。、其实国内著名网站新浪微博也是从一个小网站发展起来的。简单的LAMP架构。如今,这样简单的 架构已经无法支撑新浪微博快速发展的业务需求,随着访问用户的逐渐增长,系统不堪重负。

今天,明则就带大家一步步地构建日均访问上千PV的高性能Web站点; 日均千万PVweb站点如下图所示:

1、前端DNS,非常简陋负载均衡器;不过并不影响日均千万PV访问网站的效果。

2、LVS具有很好的伸缩缩性、可靠性和管埋性,通过LVS要实现的最终目标是:利用linux 操作系统和LVS集群软件实现一个高可用、高性能,低成本的服务器应用集群。keepalived:LVS 必备装备;所以前端LVS应该是双机热备的架构; 

3、官方测试Nginx在24G内存的机器上,能够处理的并发请求连接数达到过200万。由于Nginx使用基于事件驱动的架构能够并发处理百万级 别的TCP连接,高度模块化 的设计和自由的许可证使得扩展Nginx功能的第三方模块层出不穷,而且优秀的设计带来了极佳的稳定性,因此其作为Web服务器的反向代理被广泛应用到大 流量的网站上,包括腾讯、新浪、网 易、淘宝等访问量巨大的网站。

4、使用NGINX将网页内容动静分离;可以使NGINX能够一心一意处理静态内容的请求;官方测试NGINX处理用户连接;以及处理静态网页内容都是无与伦比的速度;

5、缓存的引入varnish是一款高性能的web-cache server,内存缓存数据;强大的vcl语言,让用户能够随心所欲对缓存数据进行过滤; 注释:”比如像一些用户私密的数据呀,更新比较频繁的数据..都不应该缓存”

6、如今由于用户并发访问量比较大,动辄就10万、20万并发都是比较常见的;高并发对于传统的共享存储,比如:网络文件系统NFS、或者集群文件 系统、它们都属于集中式存储;用户并发量一上来;必定会产生操作系统文件锁的机制;性能底下。分布式文件系统的引入:mogilefs 是一款分布式文件系统;适用于处理海量小文件 详情请参考分布式文件系统 ~MogileFS~

7、构建session集群;为什么需要构建session集群?想象一个场景;当你在购物时,你狂购了一下午的商品,结果你不小心刷新了一下;购物车中的商品全部消失了;你会怎么想?

8、使用haproxy 调度MySQL MMM ,使用MMM将用户的请求读写分离至MySQL DB; 一般的网站;都是8分读2分写;所以使用mysql 读写分离的机制会大大提高网站性能的;

9、其实我们可以将部分动态内容的计算结果进行缓存,并在随后需要的时候直接从varnish 缓存服务器取出返回给用户,对于动态网页来说,缓存的内容实际上就是动态网页的输出的html,我们称为页面缓存(page cache) 比如:”像一些新闻信息;广告…”

10、多级缓存机制;我们还可以在NGINX上做缓存;

 

好吧! 废话不多说啦! 开始构建千万PVweb站点吧!

前端 LVS + Keepalived 双机热备负载均衡器:

global_defs {
   notification_email {
          firefox@foxmail.com
         firefox@1QQ.com
   }
   notification_email_from kanotify@magedu.com
   smtp_connect_timeout 3
   smtp_server 127.0.0.1
   router_id LVS_DEVEL
}
vrrp_script chk_schedown {
   script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
   interval 2
   weight -2
}
vrrp_instance VI_1 {
    interface eth0
    state MASTER
    priority 101
    virtual_router_id 51
    garp_master_delay 1
    authentication {
        auth_type PASS
        auth_pass password
    }
    track_interface {
       eth0
    }
    virtual_ipaddress {
        172.16.249.100/16 dev eth0 label eth0:0
    }
    track_script {
        chk_schedown
    }
}
vrrp_instance VI_2 {
    interface eth0
    state MASTER
    priority 99
    virtual_router_id 52
    garp_master_delay 1
    authentication {
        auth_type PASS
        auth_pass password
    }
    track_interface {
       eth0
    }
    virtual_ipaddress {
        172.16.249.200/16 dev eth0 label eth0:1
    }
    track_script {
        chk_schedown
    }
}
virtual_server 172.16.249.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
#    sorry_server 172.16.249.100 1358

virtual_server 172.16.249.200 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    sorry_server 172.16.249.200 1358

    real_server 172.16.249.75 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.249.32 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.249.33 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.249.34 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.249.35 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.249.36 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

LVS2 keepalived configure file;

global_defs {
   notification_email {
          firefox@foxmail.com
         firefox@1QQ.com
   }
   notification_email_from kanotify@magedu.com
   smtp_connect_timeout 3
   smtp_server 127.0.0.1
   router_id LVS_DEVEL
}
vrrp_script chk_schedown {
   script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
   interval 2
   weight -2
}
vrrp_instance VI_1 {
    interface eth0
    state MASTER
    priority 99
    virtual_router_id 51
    garp_master_delay 1
    authentication {
        auth_type PASS
        auth_pass password
    }
    track_interface {
       eth0
    }
    virtual_ipaddress {
        172.16.249.100/16 dev eth0 label eth0:0
    }
    track_script {
        chk_schedown
    }
}
vrrp_instance VI_2 {
    interface eth0
    state MASTER
    priority 101
    virtual_router_id 52
    garp_master_delay 1
    authentication {
        auth_type PASS
        auth_pass password
    }
    track_interface {
       eth0
    }
    virtual_ipaddress {
        172.16.249.200/16 dev eth0 label eth0:1
    }
    track_script {
        chk_schedown
    }
}
virtual_server 172.16.249.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
#    sorry_server 172.16.249.100 1358

virtual_server 172.16.249.200 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    sorry_server 172.16.249.200 1358

    real_server 172.16.249.75 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.249.32 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.249.33 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.249.34 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.249.35 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.249.36 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

realserver configure file:

# cat realserver.sh
#!/bin/bash
#
# Script to start LVS DR real server.
# description: LVS DR real server
#
.  /etc/rc.d/init.d/functions
VIP=172.16.249.100  


host=`/bin/hostname`
case "$1" in
start)
       # Start LVS-DR real server on this machine.
        /sbin/ifconfig lo down
        /sbin/ifconfig lo up
        echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
        /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        /sbin/route add -host $VIP dev lo:0
;;
stop)
        # Stop LVS-DR real server loopback device(s).
        /sbin/ifconfig lo:0 down
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
;;
status)
        # Status of LVS-DR real server.
        islothere=`/sbin/ifconfig lo:0 | grep $VIP`
        isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
        if [ ! "$islothere" -o ! "isrothere" ];then
            # Either the route or the lo:0 device
            # not found.
            echo "LVS-DR real server Stopped."
        else
            echo "LVS-DR real server Running."
        fi
;;
*)
            # Invalid entry.
            echo "$0: Usage: $0 {start|status|stop}"
            exit 1
;;
esac

右边三台NGINX :realserver configure file:

右边三台NGINX :realserver configure file:

# cat realserver.sh
#!/bin/bash
#
# Script to start LVS DR real server.
# description: LVS DR real server
#
.  /etc/rc.d/init.d/functions
VIP=172.16.249.200  


host=`/bin/hostname`
case "$1" in
start)
       # Start LVS-DR real server on this machine.
        /sbin/ifconfig lo down
        /sbin/ifconfig lo up
        echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
        /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        /sbin/route add -host $VIP dev lo:0
;;
stop)
        # Stop LVS-DR real server loopback device(s).
        /sbin/ifconfig lo:0 down
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
;;
status)
        # Status of LVS-DR real server.
        islothere=`/sbin/ifconfig lo:0 | grep $VIP`
        isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
        if [ ! "$islothere" -o ! "isrothere" ];then
            # Either the route or the lo:0 device
            # not found.
            echo "LVS-DR real server Stopped."
        else
            echo "LVS-DR real server Running."
        fi
;;
*)
            # Invalid entry.
            echo "$0: Usage: $0 {start|status|stop}"
            exit 1
;;
esac

其它配置请看 下回分解;

LVS1 keepalived configure file;

[转载]数据挖掘之七种常用的方法 | 36大数据

mikel阅读(965)

[转载]数据挖掘之七种常用的方法 | 36大数据.

3

利用数据挖掘进行数据分析常用的方法主要有分类、回归分析、聚类、关联规则、特征、变化和偏差分析、Web页挖掘等, 它们分别从不同的角度对数据进行挖掘。

  ① 分类。分类是找出数据库中一组数据对象的共同特点并按照分类模式将其划分为不同的类,其目的是通过分类模型,将数据库中的数据项映射到某个给定的类别。

它可以应用到客户的分类、客户的属性和特征分析、客户满意度分析、客户的购买趋势预测等,如一个汽车零售商将客户按照对汽车的喜好划分成不同的类,这样营销人员就可以将新型汽车的广告手册直接邮寄到有这种喜好的客户手中,从而大大增加了商业机会。

 ② 回归分析。回归分析方法反映的是事务数据库中属性值在时间上的特征,产生一个将数据项映射到一个实值预测变量的函数,发现变量或属性间的依赖关系,其主要研究问题包括数据序列的趋势特征、数据序列的预测以及数据间的相关关系等。

它可以应用到市场营销的各个方面,如客户寻求、保持和预防客户流失活动、产品生命周期分析、销售趋势预测及有针对性的促销活动等。

③ 聚类。聚类分析是把一组数据按照相似性和差异性分为几个类别,其目的是使得属于同一类别的数据间的相似性尽可能大,不同类别中的数据间的相似性尽可能小。

它可以应用到客户群体的分类、客户背景分析、客户购买趋势预测、市场的细分等。

④ 关联规则。关联规则是描述数据库中数据项之间所存在的关系的规则,即根据一个事务中某些项的出现可导出另一些项在同一事务中也出现,即隐藏在数据间的关联或相互关系。

在客户关系管理中,通过对企业的客户数据库里的大量数据进行挖掘,可以从大量的记录中发现有趣的关联关系,找出影响市场营销效果的关键因素,为产品定位、定价与定制客户群,客户寻求、细分与保持,市场营销与推销,营销风险评估和诈骗预测等决策支持提供参考依据。

⑤ 特征。特征分析是从数据库中的一组数据中提取出关于这些数据的特征式,这些特征式表达了该数据集的总体特征。如营销人员通过对客户流失因素的特征提取,可以得到导致客户流失的一系列原因和主要特征,利用这些特征可以有效地预防客户的流失。

⑥ 变化和偏差分析。偏差包括很大一类潜在有趣的知识,如分 类中的反常实例,模式的例外,观察结果对期望的偏差等,其目的是寻找观察结果与参照量之间有意义的差别。在企业危机管理及其预警中,管理者更感兴趣的是那 些意外规则。意外规则的挖掘可以应用到各种异常信息的发现、分析、识别、评价和预警等方面。

  ⑦ Web页挖掘。随着Internet的迅速发展及 Web 的全球普及, 使得Web上的信息量无比丰富,通过对Web的挖掘,可以利用Web 的海量数据进行分析,收集政治、经济、政策、科技、金融、各种市场、竞争对手、供求信息、客户等有关的信息,集中精力分析和处理那些对企业有重大或潜在重 大影响的外部环境信息和内部经营信息,并根据分析结果找出企业管理过程中出现的各种问题和可能引起危机的先兆,对这些信息进行分析和处理,以便识别、分 析、评价和管理危机。

数据挖掘是一种决策支持过程,它通过高度自动化地分析企业的数据,做出归纳性的推理,从中挖掘出潜在的模式,帮助决策者调整市场策略,减少风险,做出正确的决策。这对于一个企业的发展十分重要。

扫描微信下面二维码,随时了解大数据最新动向,添加36大数据官方微信公共帐号dashuju36:

二维码