Hadoop现在已是互联网公司的标配,用于离线的数据存储与分析。如果是一个初创型的小团队,或者是一个业务量不大的产品,是否有必要使用Hadoop呢?
先举几个仅靠传统关系型数据库很难解决的问题
1. “大”数据问题
这里的大,纯粹就是指数据量的大小。当有几千万甚至上亿条数据时,在关系型数据库里做group by、order by等聚合操作就会非常慢,数据库的日常维护也会是DBA的噩梦。而这正是Hadoop最大的特点,利用集群的优势,解决单机性能问题。
2. 关系型数据库的扩展后的数据分析
当数据库或表达到一定量时,常见的做法就是一个字“拆”。但拆完后,业务问题解决了,数据分析却会遇到麻烦。
1)水平拆分:比如电商的订单表,按用户做了N个分区,如果要统计全局的订单总数,怎么破?
2)垂直拆分:比如订单和商品拆成了两个独立的数据库,如果要分析某个商品的销量,或许订单库能查出每个商品id下的销量,却很难知道商品名称,因为没法跨库join,怎么破?
一种办法是把拆分后的数据汇总到一台机器上,这样原来的统计sql又可以跑起来,但是这样就违背了拆分的初衷,甚至可能单机存不了这么多数据。Hadoop则可以认为没有存储空间的上限,可以线性且随意地添加机器,而且代码逻辑上这些数据是统一而不是分割的。
3. 不同数据源的统一存储与分析
举个例子,要分析商品的访问次数,就需要分析服务器访问日志。但是光有日志不行,可能要根据日志里的URL关联到商品的名称。这时候需要把日志和商品表做关联查询。而把日志存在数据库中,显然不是合理的方案。而仅仅通过简单的awk等文本处理工具,又不好关联数据库中的商品。Hadoop可以作为统一的存储介质,把各种格式、各种来源的数据汇总在一起,方便后续的处理。
是否用Hadoop,还是要看业务需求。对于一个有理想的互联网公司是应该选择Hadoop的。若不使用百度、cnzz、google等第三方流量统计工具,而是自己统计流量数据,Hadoop就几乎成为了必选工具。如果是一个传统软件公司,就不一定有动力选择Hadoop了,因为数据量可能不大,也不用分析页面流量,数据库单机可以搞定所有报表,使用Hadoop反而增加了维护成本。