OLAP/MOLAP/ROLAP/HOLAP/DOLAP

数据仓库中的Cube以不同的形式被存储着。以关系型来存储的叫做ROLAP(Relational Online Analytical Processing),而以多维来存储的叫MOLAP(Multidimensional Online Analytical processing mode is called MOLAP),两种方式结合的叫HOLAP(Hybrid Online Analytical Processing)。   MOLAP ── 这是OLAP分析的传统模式。在MOLAP中,数据以多维cube方式进行存储,而非存储于关系型数据库中。 优点是cube本身就是为了数据获取而建立的,它提供了完美的查询性能。所有的计算都是在cube建立的时候预先生成的。 缺点是它只能处理有限的数据。由于所有的计算项都预先建立好,cube无法从大规模数据中派生。 可通过在构建cube时,只包含汇总级别的数据,来绕过这一不足。这种形式也需要在cube技术上做额外的投资,而关于该项技术的知识也许是企业本身所不具备的。 ex:COGNOS; HYPERION; TM1   ROLAP ── 这种模式的底层数据被存储在关系型数据库中,通过某种方式来使得关系型数据库中的这些数据达到传统OLAP中切片、切块的功能。 优点是可以处理大规模数据,并且仰仗关系型数据库自身的全部功能。 缺点是相较于MOLAP,其性能较差,每个ROLAP报表都是SQL查询,受制于其类型和SQL有限的功能。ROLAP供应商试图通过创建额外的复杂功能、提供用户自定义功能以弥补这一缺憾。 ex:COGNOS REPORT NET; BUSINESS OBJECTS; MICROSTRATAGY; HYPERION   HOLAP ── 结合了以上二者的优势。对于汇总信息,HOLAP受益于Cube技术,而对于下钻功能则以ROLAP模型来实现。 ex:COGNOS DOLAP ── 基于桌面数据库的OLAP。(编者注:个人感觉很少见)  ex:COGNOS business object tools.   比较MOLAP, HOLAP 与 ROLAP    存储媒介影响了cube的处理时间、存储容量和浏览速度。一些影响MOLAP存储的因素是:… Read More »

数据挖掘十大经典算法

国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 2006年12月评选出了数据挖掘领域的十大经典算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART. 不仅仅是选中的十大算法,其实参加评选的18种算法,实际上随便拿出一种来都可以称得上是经典算法,它们在数据挖掘领域都产生了极为深远的影响。   1. C4.5 C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法. C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进: 1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足; 2) 在树构造过程中进行剪枝; 3) 能够完成对连续属性的离散化处理; 4) 能够对不完整数据进行处理。 C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。   2. The k-means algorithm 即K-Means算法 k-means algorithm算法是一个聚类算法,把n的对象根据他们的属性分为k个分割,k < n。它与处理混合正态分布的最大期望算法很相似,因为他们都试图找到数据中自然聚类的中心。它假设对象属性来自于空间向量,并且目标是使各个群组内部的均方误差总和最小。   3. Support vector machines 支持向量机,英文为Support Vector Machine,简称SV机(论文中一般简称SVM)。它是一种監督式學習的方法,它广泛的应用于统计分类以及回归分析中。支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面。分隔超平面使两个平行超平面的距离最大化。假定平行超平面间的距离或差距越大,分类器的总误差越小。一个极好的指南是C.J.C Burges的《模式识别支持向量机指南》。van der… Read More »

30 Google marketing tips for small businesses

Every small business owner with web presence knows the importance of getting good rankings on Google.Once your site starts to perform well on the world’s most popular search engine, you should start to receive a growing number of site visitors. These visitors are all potential customers for your products and services. Using our experience of… Read More »

[zz]由12306.cn谈谈网站性能技术

12306.cn网站挂了,被全国人民骂了。我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题。因为仓促,而且完全基于本人有限的经验和了解,所以,如果有什么问题还请大家一起讨论和指正。(这又是一篇长文,只讨论性能问题,不讨论那些UI,用户体验,或是是否把支付和购票下单环节分开的功能性的东西) 业务 任何技术都离不开业务需求,所以,要说明性能问题,首先还是想先说说业务问题。 其一,有人可能把这个东西和QQ或是网游相比。但我觉得这两者是不一样的,网游和QQ在线或是登录时访问的更多的是用户自己的数据,而订票系统访问的是中心的票量数据,这是不一样的。不要觉得网游或是QQ能行你就以为这是一样的。网游和QQ 的后端负载相对于电子商务的系统还是简单。 其二,有人说春节期间订火车的这个事好像网站的秒杀活动。的确很相似,但是如果你的思考不在表面的话,你会发现这也有些不一样。火车票这个事,还有很多查询操作,查时间,查座位,查铺位,一个车次不 行,又查另一个车次,其伴随着大量的查询操作,下单的时候需要对数据库操作。而秒杀,直接杀就好了。另外,关于秒杀,完全可以做成只接受前N个用户的请求(完全不操作后端的任何数据, 仅仅只是对用户的下单操作log),这种业务,只要把各个服务器的时间精确同步了就可以了,无需在当时操作任何数据库。可以订单数够后,停止秒杀,然后批量写数据库。火车票这个岂止是秒杀那么简单。能不能买到票得当时告诉用户啊。 其三,有人拿这个系统和奥运会的票务系统比较。我觉得还是不一样。虽然奥运会的票务系统当年也一上线就废了。但是奥运会用的是抽奖的方式,也就是说不存在先来先得的抢的方式,而且,是事后抽奖,事前只需要收信息,事前不需要保证数据一致性,没有锁,很容易水平扩展。 其四,订票系统应该和电子商务的订单系统很相似,都是需要对库存进行:1)占住库存,2)支付(可选),3)扣除库存的操作。这个是需要有一致性的检查的,也就是在并发时需要对数据加锁的。B2C的电商基本上都会把这个事干成异步的,也就是说,你下的订单并不是马上处理的,而是延时处理的,只有成功处理了,系统才会给你一封确认邮件说是订单成功。我相信有很多朋友都收到认单不成功的邮件。这就是说,数据一致性在并发下是一个瓶颈。   其五,铁路的票务业务很变态,其采用的是突然放票,而有的票又远远不够大家分,所以,大家才会有抢票这种有中国特色的业务的做法。于是当票放出来的时候,就会有几百万人甚至上千万人杀上去,查询,下单。几十分钟内,一个网站能接受几千万的访问量,这个是很恐怖的事情。据说12306的高峰访问是10亿PV,集中在早8点到10点,每秒PV在高峰时上千万。 多说几句: 库存是B2C的恶梦,库存管理相当的复杂。不信,你可以问问所有传统和电务零售业的企业,看看他们管理库存是多么难的一件事。不然,就不会有那么多人在问凡客的库存问题了。(你还可以看看《乔布斯传》,你就知道为什么Tim会接任Apple的CEO了,因为他搞定了苹果的库存问题) 对于一个网站来说,浏览网页的高负载很容易搞定,查询的负载有一定的难度去处理,不过还是可以通过缓存查询结果来搞定,最难的就是下单的负载。因为要访问库存啊,对于下单,基本上是用异步来搞定的。去年双11节,淘宝的每小时的订单数大约在60万左右,京东一天也才能支持40万(居然比12306还差),亚马逊5年前一小时可支持70万订单量。可见,下订单的操作并没有我们相像的那么性能高。 淘宝要比B2C的网站要简单得多,因为没有仓库,所以,不存在像B2C这样有N个仓库对同一商品库存更新和查询的操作。下单的时候,B2C的 网站要去找一个仓库,又要离用户近,又要有库存,这需要很多计算。试想,你在北京买了一本书,北京的仓库没货了,就要从周边的仓库调,那就要去看看沈阳或 是西安的仓库有没有货,如果没有,又得看看江苏的仓库,等等。淘宝的就没有那么多事了,每个商户有自己的库存,库存分到商户头上了,反而有利于性能。 数据一致性才是真正的性能瓶颈。有 人说nginx可以搞定每秒10万的静态请求,我不怀疑。但这只是静态请求,理论值,只要带宽、I/O够强,服务器计算能力够,并支持的并发连接数顶得住10万TCP链接的建立 的话,那没有问题。但在数据一致性面前,这10万就完完全全成了一个可望不可及的理论值了。 我说那么多,我只是想从业务上告诉大家,我们需要从业务上真正了解春运铁路订票这样业务的变态之处。 前端性能优化技术 要解决性能的问题,有很多种常用的方法,我在下面列举一下,我相信12306这个网站使用下面的这些技术会让其性能有质的飞跃。 一、前端负载均衡 通过DNS的负载均衡器(一般在路由器上根据路由的负载重定向)可以把用户的访问均匀地分散在多个Web服务器上。这样可以减少Web服务器的请求负载。因为http的请求都是短作业,所以,可以通过很简单的负载均衡器来完成这一功能。最好是有CDN网络让用户连接与其最近的服务器(CDN通常伴随着分布式存储)。(关于负载均衡更为详细的说明见“后端的负载均衡”) 二、减少前端链接数 我看了一下12306.cn,打开主页需要建60多个HTTP连接,车票预订页面则有70多个HTTP请求,现在的浏览器都是并发请求的。所以,只要有100万个用户,就会有6000万个链接,太多了。一个登录查询页面就好了。把js打成一个文件,把css也打成一个文件,把图标也打成一个文件,用css分块展示。把链接数减到最低。 三、减少网页大小增加带宽 这个世界不是哪个公司都敢做图片服务的,因为图片太耗带宽了。现在宽带时代很难有人能体会到当拨号时代做个图页都不敢用图片的情形(现在在手机端浏览也是这个情形)。我查看了一下12306首页的需要下载的总文件大小大约在900KB左右,如果你访问过了,浏览器会帮你缓存很多,只需下载10K左右的文件。但是我们可以想像一个极端一点的案例,1百万用户同时访问,且都是第一次访问,每人下载量需要1M,如果需要在120秒内返回,那么就需要,1M * 1M /120 * 8 = 66Gbps的带宽。很惊人吧。所以,我估计在当天,12306的阻塞基本上应该是网络带宽,所以,你可能看到的是没有响应。后面随着浏览器的缓存帮助12306减少很多带宽占用,于是负载一下就到了后端,后端的数据处理瓶颈一下就出来。于是你会看到很多http 500之类的错误。这说明服务器垮了。 四、前端页面静态化 静态化一些不常变的页面和数据,并gzip一下。还有一个并态的方法是把这些静态页面放在/dev/shm下,这个目录就是内存,直接从内存中把文件读出来返回,这样可以减少昂贵的磁盘I/O。 五、优化查询 很多人查询都是在查一样的,完全可以用反向代理合并这些并发的相同的查询。这样的技术主要用查询结果缓存来实现,第一次查询走数据库获得数据,并把数据放到缓存,后面的查询统统直接访问高速缓存。为每个查询做Hash,使用NoSQL的技术可以完成这个优化。(这个技术也可以用做静态页面) 对于火车票量的查询,个人觉得不要显示数字,就显示一个“有”或“无”就好了,这样可以大大简化系统复杂度,并提升性能。 六、缓存的问题 缓存可以用来缓存动态页面,也可以用来缓存查询的数据。缓存通常有那么几个问题: 1)缓存的更新。也叫缓存和数据库的同步。有这么几种方法,一是缓存time out,让缓存失效,重查,二是,由后端通知更新,一量后端发生变化,通知前端更新。前者实现起来比较简单,但实时性不高,后者实现起来比较复杂 ,但实时性高。 2)缓存的换页。内存可能不够,所以,需要把一些不活跃的数据换出内存,这个和操作系统的内存换页和交换内存很相似。FIFO、LRU、LFU都是比较经典的换页算法。相关内容参看Wikipeida的缓存算法。 3)缓存的重建和持久化。缓存在内存,系统总要维护,所以,缓存就会丢失,如果缓存没了,就需要重建,如果数据量很大,缓存重建的过程会很慢,这会影响生产环境,所以,缓存的持久化也是需要考虑的。 诸多强大的NoSQL都很好支持了上述三大缓存的问题。 后端性能优化技术 前面讨论了前端性能的优化技术,于是前端可能就不是瓶颈问题了。那么性能问题就会到后端数据上来了。下面说几个后端常见的性能优化技术。 一、数据冗余 关于数据冗余,也就是说,把我们的数据库的数据冗余处理,也就是减少表连接这样的开销比较大的操作,但这样会牺牲数据的一致性。风险比较大。很多人把NoSQL用做数据,快是快了,因为数据冗余了,但这对数据一致性有大的风险。这需要根据不同的业务进行分析和处理。(注意:用关系型数据库很容易移植到NoSQL上,但是反过来从NoSQL到关系型就难了)… Read More »

Safari浏览器浏览器对HTML5的支持

Safari浏览器浏览器对HTML5的支持Safari浏览器支持HTML5音频和视频元素, 离线存储支持, 和其它HTML5功能使得它很容易为​​开发人员提供丰富的, 互动媒体体验在本机的浏览器, 专有技术,而不需要为. 支持HTML5的媒体网站可以提供丰富的, 互动媒体容易,因为他们提供的图像. Safari was the… Read More »

Safari 6更新了什么?

Safari 6更新了什么? Safari continues to support the latest web standards and technologies. New features in Safari 6 allow you to create audio for interactive web applications, tap into hardware-accelerated color effects, and keep users up-to-date with web notifications. Web Audio API With the Web Audio API, you can create and customize audio effects in interactive web… Read More »

ios6更新,safari增加对HTML5的支持

iOS 6中Safari对HTML5的支持 iOS6发布了beta版,其中包括了新版的Safari浏览器,增强了对HTML5的支持,我们来了解下吧~~ 目前,ios 5.1中safari在HTML5test.com的测试得分是324,而ios 6中safari的分数是360。 远程调试 新的远程调试工具可以更方便的在PC/Mac上对iOS上Safari中的页面进行调试,界面类似Android上的Chrome浏览器。  终于支持这个了,可以在浏览器中上传照片文件什么的了。。。内牛满面。。。 Audio API 这个大家也期待已久了吧,不多解释 CSS3 Filter 这个我们之前有介绍过,最新的 chrome 19正式版已经实现了该功能但是默认并没有开启,你需要通过about://flags(chrome://flags)来开启。 离线存储(app cache)数据限制从5MB提高到25MB requestAnimationFrame webkit私有api,不过基本除了opera,各个最新的浏览器也都开始支持了,详情查看MDN的介绍。 横屏模式下支持全屏 也就是fullscreen api了。 其它更新 更快的Javascript 好吧,每次更新都会有这个,不算新闻了。。。 智能app banner 类似windows 8中的IE10,允许打开网站时显示app信息。一种app和网站之间的连接方法。用户在safari中浏览你的网站的时候,可以告诉他你有个原生app,他可以安装或者打开它。

新版Mozilla Firefox的UI设计理念预览

Mozilla Firefox 未来的UI设计 作为Mozilla Firefox的忠实粉丝,这里跟大家分享一下Mozilla刚刚跟我们分享的 Firefox 的未来设计理念。他们首先展示了其实整个界面背後的设计哲学是来自火狐(Firefox)这种动物的「天性」,他们形容为和蔼(soft)丶友善(friendly)和富有人性的(human);于是他们便将界面的元素都设计得很 soft,tag 等图示都会有着圆滑的边缘(跟Chrome有点像啊)。还添加了阅读模式。另外,他们也打出界面一体化的牌,将手机丶平板和电脑的用户体验都统一了。而且在计划的当中也包括了为 Windows 8 而设的 Metro 版本,是以 Win 8 的特色 — Tile 来作为主调的。最吸引我的是新的开发模式(包括现有的3D层叠似视图),相信会给我们这些web developer带来巨大的便利和更高的用户体验。整个简报还有数不尽的「未来特色」,有兴趣的话可以到继续阅读看看。 Ux overview fxworkweek_april2012

Safari浏览器对CSS3的支持

Safari浏览器浏览器对CSS3的支持Safari将继续实施在网络上最具创新性的网络技术来推动的界限,什么是可能的. 借助Safari浏览器支持CSS动画, CSS效果, 和CSS网页字体, 您可以创建下一代丰富, 交互式Web应用程序. CSS动画Safari是第一个浏览器,支持CSS过渡和动画。... Read More »

Linux ubuntu lamp安装配置环境phpmyadmin

PHP开发和服务器运行环境首选LAMP组合 PHP开发和服务器运行环境首选LAMP组合,即Linux+Apache+Mysql+Php/Perl/Python,能最优化服务器性能。如何在本地电脑Ubuntu 中安装和配置LAMP环境搭建?Ubuntu9.10本身就是基于Linux内核,所以Linux是现成的了。使用Ubuntu LAMP Server软件包可以很简单地实现Linux下Apache,Mysql和Php的统一安装和配置,也不再需要一个一个来安装配置了。 Ubuntu环境下如何安装LAMP组件? 使用Ubuntu界面管理器: 系统->系统管理->新立得软件包管理器->编辑->使用任务标记分组软件包->LAMP Server(勾选)->确定->返回到上一个窗口点击应用(或System->Administration->Synaptic Package Manager->Edit->Mark packages by Task->LAMP Server->OK)。然后系统会自动下载安装lamp环境软件包,几分钟就下载搞定。安装过程中会要求设置Mysql root帐号的密码,设置好了记住。另外当Ubuntu系统升级时lamp环境组件也会同时更新到最新版本。 安装完毕测试:打开Firefox浏览器在地址栏输入127.0.0.1,显示It works!表明Apache服务器已经开始工作了,LAMP安装也就这样完成了。 Linux ubuntu LAMP 安装配置环境-It Works 当然不使用Gnome,使用终端命令也很简单: 直接一条命令:apt-get install apache2 mysql-server mysql-client php5 php5-gd php5-mysql 设置Ubuntu文件执行读写权限 LAMP组建安装好之后,PHP网络服务器根目录默认设置是在:/var/www。由于Linux系统的安全性原则,改 目录下的文件读写权限是只允许root用户操作的,所以我们不能在www文件夹中新建php文件,也不能修改和删除,必须要先修改/var/www目录的读写权限。在界面管理器中通过右键属性不能修改文件权限,得执行root终端命令:sudo chmod 777 /var/www。然后就可以写入html或php文件了。如果对777表示的文件权限不是很清楚,可以到这篇文章中看看:文件权限666是什么意思。 如何安装phpmyadmin-Mysql 数据库管理 使用界面管理器: 系统->系统管理->新立得软件包管理器->搜索 phpmyadmin->右键标记安装。 或直接使用一条命令:sudo apt-get install phpmyadmin 安装开始。 phpmyadmin设置: 在安装过程中会要求选择Web server:apache2或lighttpd,选择apache2,按tab键然后确定。然后会要求输入设置的Mysql数据库密码连接密码 Password of the database’s… Read More »