【IT168技术】万众期待的“2012数据库技术大会”已于2012年4月13日如期召开,本次大会已是IT168、ITPUB、IXPUB、ChinaUnix联合主办的第三届数据库技术盛会,为满足广大数据库从业者的需要已经由两天升级为三天。大会聚集了国内最优异的数据库专家、大量国内数据库工程师、架构师等优异人群。
电信领域的数据,历史上一直是话单、计费账务、网络日志类型的数据为主,当前正处于移动互联网、物连网蓬勃发展的时期,数据的爆炸式增长,传统的关系数据库,已经不能满足海量数据运营和管理需求,如何把数据进行分布管理就成为研究的重点。
▲华为数据库能力中心高级工程师刘华成
NOSQL是一个分布式的、面向海量数据管理的数据库系统,在互联网的海量数据管理上,有很好的表现,因此,我们对NOSQL在电信领域的应用展开探索,本次议题主要讨论我们碰到的问题和一些方案尝试。
电信业务发展多头并进,多元化发展,数据内容也就越来越丰富,语音、消息、视频、电子书等。隨着移动互联网的发展和云计算中心的建设,海量数据的存储管理需求变得非常迫切。
每天产生大量的数据,数据种类丰富:
1、非结构化数据,比如:视频,音频,图片,文件。2、半结构数据,比如:XML文件,JSON文件,HTML 文件。3、结构化数据,比如:用户信息,帐号信息,话单,系统日志,统计报表.
电信运营商面临的海量数据挑战
1. 移动的基地战略下,各个基地都面临海量数据的挑战。(例如:互联网基地、阅读基地、动漫基地、游戏基地、音乐基地······)
2. 运营商的集中化,原本分割的数据,集中后数据量巨大。(例如:计费云、集中的经营分析···)
3. 全民参与、个性化创造产生的巨大数据量。(例如:微博、个性视频、个性铃声···)
4. 高速网路产生的大量设备运行日志、用户访问行为信息、消费信息。(例如:路由日志、安全日志、位置信息···)
存储管理的挑战:1、传统商业数据库的双机部署式,性能已经不能满足要求;不停升级硬件导致成本居高不下。2、单个文件系统有2亿文件的上限,无法满足海量小文件存储的要求。3、分库、升级扩容的工程风险高,数据割接的工作量大。
NoSQL在电信领域的应用:NoSQL主要用于海量数据的分析、关系性不强的在线互动信息存储和查询。
电信BI领域:1.客户行为分析。2.Wap访问习惯分析。3.用户行为习惯分析。4.话单分析。5.交叉营销分析。
移动网络质量:1.设备运行日志。2.通话质量分析。3.网络带宽情况。4.掉话情况和接通率。5.设备告警分析。
移动互联网业务:1.个人IDC信息。2.移动微博。3.融合消息存储。4.论坛记录。5.Feed和评论信息。
在线阅读:1.书目。2.书签。3.书评。4.消费记录查询。5.订阅信息。
NoSQL应用困惑和问题
▲NoSQL应用困惑和问题
NoSQL是传统商业数据库的补充
在OLTP的业务中,与传统商业数据库相比, NOSQL :请求时延大。数据分布后,key范围查询性能不高。事务支持还比较差。关联查询还很不好处理。集群的运维管理工具不丰富。
在OLAP的业务中,与传统商业数据库相比, NOSQL :全局的数据统计不好实现。没有PLSQL支持,数据统计可编程困难。对海量数据统计分析的调优手段缺失。
以上问题,导致开发人员:1)倾向用传统的磁盘库解决问题。2)仅有NOSQL适合的场景下,才用NOSQL。
NoSQL也可以支持SQL
困难:现网的业务部件多,全部改造版本工作量大,同时支持多种数据库,代码不好维护。
对策:我们尝试用SQL统一开发模式,最小代价的尝试,快速产生效果。
增加SQL特性:1、支持标准JDBC驱动。2、支持简单的SQL 92标准。3、支持JAVA存储过程。4、支持基于KEY的统计函数:SUM/COUNT/MAX/MIN。5、增加KEY内的索引,提升不同条件的检索效率。
NoSQL也可以支持SQL(续:DML)
▲NoSQL也可以支持SQL
1、 Client自动完成KEY值的解析,按KEY路由请求。
2、修改请求(insert/delete/update)仅在单个NOSQL节点完成修改,然后同步到副本到其它节点。
3、查询请求定位到目标节点后,在目标节点处理请求,不要多个副本同时查询。
NoSQL也可以支持SQL(续:DDL)
App client向任意节点发送DDL命令,都会路由到当值的MANAGER节点去执行DDL, MANAGER节点负责把schema分发到其它的节点。
NoSQL也可以支持SQL(续:TRUNCATE)
1、Truncate命令本地执行成功则返回.元数据中标记一个Timestamp,早于这个时间点的数据,在compact时自动丢弃。元数据同步时,操作自动扩散到其它节点。
2、查询扫描时,数据的timestamp小于元数据中标记的Timestamp时间,就会丢弃,不返回客户端。
NoSQL也可以支持SQL(续: PLSQL)
当前仅支持JAVA的PLSQL,包括JAVA CLASS的开发和加载,PLSQL的定义和PLSQL的调用四个步骤。
1、 Class开发:class开发,提供二次开发接口给用户,由用户完成开发。
2、Class加载:通过客户端tools,从客户端机器上上传class到NoSQL服务Node,然后分发到NoSQL群集中的所有节点。各节点加载class到内存供调用。
2、 SP定义:提供SQL语法定义SP函数和存储过程,NoSQL分发SP定义信息到群集内的各节点。
4、SP执行: 存储过程通过CALL sp_name的方式调用,还是可在DML语句中引用。
NoSQL也可以有事务
1、NOSQL事务能力:
在HBase方案中,Hbase接受到请求处理后,把结果写到HDFS是保证row级别的事务的,HDFS保证数据同步写成功。
在CASSANDRA中,接受到请求后,根据请求中的写N份成功后返回,保证数据的一致性,没有事务能力。
2、业务模块需要松耦合,分次执行对多个表的写操作时,就需要有事务,事务的粒度和方案有两种:
(1)KEY内的事务比较常用。 对应的方案:节点支持自己的KEY内事务。(我们已经实现,效果很好)(2)多个KEY的事务很少。对应的方案:全局锁和事务管理。(有开源版本,性能不高)
NoSQL的请求时延可以更低
优化的地方:1、Client完成路由,请求一跳获得数据为主。2、数据按时间倒排,扫描一次命中即返回。(针对绝对定位的数据)3、数据清单查询,分批次返回。(控制每次请求的数据量)4、减少中间处理环节,包括:不要求副本也执行查询;不反系列化无效数据等。5、有效利用索引,减少数据扫描量。
优化效果:95%的查询,时延1-2ms.
NoSQL存储空间不一定要8倍
精简的内容:1、去除column中的name。2、去除无用的标识(如TTL标识不持久化,继承rows的timestamp,column不需要持久)。3、数据长度,通过第一个字节的高bit位,确定2字节还是4字节整数。
归并数据也可以不全部参与
问题:NOSQL的compact需要把所有的数据都合并,生成一个大文件,在cassandra中会导致数据compact时间太长,磁盘损耗大,空间占用也很大。HBASE中,大数据文件的分裂,region的分裂可能导致系统不稳定。
对策:采用归档的方案,固定部分不常用的数据,提升合并性能,减少磁盘空间占用。
归档策略:1、按时间归档。2、按size归档(已经实现)。3、按访问频度归档。4、按业务策略归档。
改进效果:1)归并空间预留减少到归档的size.。2)数据归并时间不再随数据的增长而增长。