朱肖颖,梁朝湘,陆科达
(1.桂林电子科技大学 计算机与信息安全学院,广西 桂林 541004;2.3.梧州学院,广西 梧州 543002)
企业二维码微信营销平台中的大数据优化处理
朱肖颖1,梁朝湘2,陆科达3
(1.桂林电子科技大学 计算机与信息安全学院,广西 桂林 541004;2.3.梧州学院,广西 梧州 543002)
针对企业二维码微信营销平台中高并发、大数据处理过程效率低的问题,对大数据的存取过程和大数据高并发情况下的代码逻辑做相应的优化处理。这个优化处理包括数据库的设计,SQL语句的优化,算法结构的优化和建立高效索引等措施的配合。结果表明,优化后的系统平台读写速度显著提高。
营销平台;大数据;高并发;数据库
2015年3月“互联网+”战略在十二届全国人大三次会议上由全国人大代表、腾讯董事会主席兼CEO马化腾提出。马化腾解释说,“互联网+”战略就是利用互联网的平台,利用信息通信技术,把互联网和包括传统行业在内的各行各业结合起来,在新的领域创造一种新的生态[1]。
微信,作为当下最受欢迎的一款超级APP,已成功融入了许多人的生活。截至2016年第三季度,微信的智能手机覆盖率已经由2015年底的90.1%提升至92.5%,月活跃用户达到 8.46 亿,比去年同期增长 30%,用户覆盖 200 多个国家、超过 20 种语言。此外,各品牌的微信公众账号总数已经超过 800 万个,移动应用对接数量超过 85000个,微信支付用户则达到了 4 亿左右[2]。微信正是信息通讯技术和各行业结合的重要手段,企业传统的营销方式如电视广告、报纸、宣传海报等通常要耗费大量的人力、物力和财力。微信营销基于微信这一平台,由于微信的各项功能都是免费的,使用过程中仅仅产生少量的流量费,因此,相较于传统营销方式,微信营销的成本极为低廉,几乎接近免费。这让微信营销得到了许多企业的追捧,企业二维码微信营销平台正是“互联网+”时代下的产物。
企业二维码微信营销平台以二维码技术为切入点,依托微信平台搭建起实时动态智能化大数据的营销服务平台,包括对二维码值的大批量生成、导出、生效、失效、报废处理。因此,高并发和大数据处理的需求显得格外重要。随着企业生产规模的扩大和消费者对营销产品认知度的提升,平台的使用率会爆炸性地增长。如一次性生成导出几十万甚至上千万的二维码值,多个客户端同时对二维码值进行生效失效处理。此外,在互联网技术日益发达的今天,对于用户而言,平台的访问速度,服务质量,平台的健壮性和稳定性等都会直接影响用户体验。因此,在高并发、大数据量访问的情况下,如何保证平台的稳定性、健壮性,是企业二维码微信营销平台需要面对的巨大的挑战,也是本文在优化处理过程中需要考虑的问题。
影响系统平台访问速度快慢的因素归根结底是数据库模型的建立是否合理、高效[3]。一个不良的数据库模型,轻则加大开发者开发的难度,影响软件系统平台的运行性能,重则可能直接导致系统崩溃。因此,一个完整准确的数据库模型必须在整个企业二维码微信营销平台开始实施前设计好。
数据库模型的建立需注意以下几大问题。
首先要注重数据的需求分析过程。系统平台的设计初期,需要处理的数据比较小,功能也相对简单,所以功能的完整性必然会在我们的考虑范围之内,但却往往忽视了性能的要求。这种情况常常导致软件系统平台正常工作了一阵子之后性能不断下降,但这个时候,系统的架构已基本定型,推倒重做的代价非常大,往往不可行。因此,我们大多只会在现有软件系统的基础上不断修改,这个过程也必定会消耗不少的人力物力和资源资金。有鉴于此,在本平台的设计中,数据库模型建立之初,并不急于设计与实现,而是先讨论分析系统可能存在的瓶颈,并将可能出现的问题扼杀在初生的摇篮里,降低开发成本,提高系统性能。
其次是减少非必要的数据冗余。大量的数据冗余会导致数据库中的数据重复出现,不仅占用大量的存储资源,还会影响数据库查询的效率[4]。所以在数据库设计中,要尽可能降低数据冗余,达到数据的简洁,易用。为了达到最低冗余,在设计中需要进行模式的规范化,一般情况下,达到BC范式就可以大幅度地降低数据冗余。
另外,数据字段是数据库最小的单位,它的设计对软件系统性能的影响很大。因此,在数据表的建立过程中,需要注意以下几点。
第一,数据类型尽量用数字型。数字型会比字符型快很多,因为数据类型在检索过程中只会扫描一次,而字符型会重复扫描,因此,用数字型会提高数据库查询效率。
第二,在满足预见未来需求的前提下尽量选择较小的数据类型。因为数据在磁盘中被读取出来之后会先储存在内存,再通过处理器和磁盘的输入/输出从内存中读取。由此可知,数据类型小,占用的空间也相对较小,过程中读取数据的效率也会提升。
第三,灵活选择char和varchar数据类型,数据库中的字符类型char和varchar大小一样,都是8000个字节,但两者都分别有自己的特性,char查询速度快,但占用较多内存,varchar查询速度要比char慢一些,但是可节省内存。
第四,少用text和image数据类型,text和image类型是用二进制存储的,而二进制字段的读写速度相对较慢,所以能不用text和image数据类型的情况下最好不用。
第五,自增字段需要慎重使用,因为自增字段不利于数据的迁移。
企业二维码微信营销平台涉及几十万二维码值的生成、生效、失效、报废、导出等处理,频繁操作大数据量的数据必定导致系统性能降低。所以我们要尽可能做到以下几点:在满足用户需求的基础上,尽量减少客户端对数据库的访问次数;使用搜索参数搜索数据时,尽量使表的访问行数最小化,使结果集最优,使网络负担最小;在条件许可的情况下,最小化操作,提高查询的响应速度。
没有索引,数据库要查找某条数据就必须得对整个表的数据进行扫描,直到找出符合条件的数据。当表的数据量少时,系统性能没有太大的差异,但当数据表中的数据增长到一定的量,系统的性能就显得极为糟糕了。因此,在企业二维码微信营销平台的大数据处理过程中,必须优化数据库的查询语句,适当的使用索引技术进行查询,尽量避免全盘扫描。
数据库查询语句的优化可以遵循以下几个规则。
(1)在 WHERE 子句中避免对字段进行 NULL 值判断,避免使用不等号操作符,如:!=或<>,否则将导致索引无法正确使用从而进行全表扫描。
(2)避免在 WHERE的等号(“=”)左边进行表达式运算,否则将可能导致系统无法正确使用索引。
(3)能使用EXISTS和NOTEXISTS尽量使用,尽量不用IN或NOTIN。因为IN或NOT IN会导致引擎进行全表扫描而放弃索引的使用。
(4)合理使用UNION和UNION ALL语句,UNION语句会执行SELECT DISTINCT函数而UNION ALL不会,所以对于一些单纯地想使用分表来提高效率的查询,完全可以使用UNION ALL语句,因为UNION ALL语句会减少许多不必要的资源。
(5)避免使用SELECT INTO语句。 因为SELECT INTO 的使用会锁定数据表,导致其他用户无法访问该表。
(6)尽量使用表变量来代替临时表,减少频繁创建和删除临时表操作,以防止系统数据表资源的消耗。
3.1程序优化
企业二维码微信营销平台生成、生效、失效操作都需要一次性处理几十万甚至上千万的数据,如果采用普通的执行更新(executeUpdate)方法对一千万的数据量进行处理,就会导致数据库和服务器之间有一千万次的交互,正常情况下数据库服务器处理一万次数据交互需要一秒,则要处理完一千万的数据量就得花费一千秒。如果采用的是批处理提交模式,一千条数据才提交一次,即和服务器交互次数为一万次,交互次数大大减少。平台系统应用了Hibernate批处理操作,优化存储程序,在程序上进行分段插入并及时清空缓存数据,减少访问数据库的次数,这种操作对于数据库服务器中物理I/O的减少不会太明显,但会大大加快数据库执行速度,减少网络延时开销,此外,还会降低数据库服务器端的处理器开销。
3.2存储过程的优化
基于游标的方法不仅效率差,还会占用内存和宽带,减少可用的并发[5]。通常情况下,基于集的方法会更优于基于游标的方法,但某些情况下又必须通过游标来实现,所以在使用时,最好先对比基于游标和基于集的方法,看哪种方法更优,从而得到更好的实现途径。
索引是一把双刃剑,索引使用得当可显著提升系统检索性能,相反,则会导致系统性能降低[6]。因为数据库的工作量会随着索引的增多而增大,索引过多的使用甚至可能导致索引碎片的出现,所以我们必须建立高效的索引,精益求精,让数据库得到高性能的发挥。
创建索引往往有两个目的:保证数据库表中每一行数据的唯一性和加快对表中记录的查找或排序。在大型的数据库中,经常会使用聚集索引和非聚集索引,聚集索引的表中键值的逻辑顺序决定了表中相应行的物理顺序,采用聚集索引的方式找到含有第一个值的行后,就能够保证含有后边索引值的行物理位置邻近,且一个表只允许有一个聚集索引。非聚集索引的表数据的逻辑存储顺序和物理存储顺序无关,索引通过二叉树来进行描述,它的叶节点仍然是索引节点,但会有一个指针指向对应的数据块,非聚集索引的表行数会和数据表行数保持一致。所以,可以认为无论添加何种索引技术都能够有效提高数据查询速度,但是同时某种程度上会导致增、删、改的操作性能降低,当填充因子大时性能降低的情况就越发明显。因此,如果需要频繁地对具有较多索引的表进行增、删、改操作,首当其冲应设置较小的填充因子,给各个数据页留足空间,从而减少数据页分割及重组操作。
优化前一次性生成25万和50万二维码值总耗时如图1和图2所示。
图1 优化前一次生成25万二维码值总耗时
图2 优化前一次生成50万二维码值总耗时
优化后一次性生成25万和50万二维码值总耗时如图3和图4所示。
图3 优化后一次生成25万二维码值总耗时
图4 优化后一次生成50万二维码值总耗时
优化前后一次性生成各数据量二维码值耗时分布对比如图5所示。
优化前一次性导出25万和50万二维码值总耗时如图6和图7最后一行文字所示。
图6 优化前一次导出25万二维码值总耗时
图7 优化前一次导出50万二维码值总耗时
优化后一次性导出25万和50万二维码值总耗时如图8和图9最后一行文字所示。
图8 优化后一次导出25万二维码值总耗时
图9 优化后一次导出50万二维码值总耗时
实验结果表明,随着一次性生成/导出二维码值数量的增多,优化前后总耗时的差别就越大,即从数据库的设计,SQL语句的优化,算法结构的优化以及高效索引的建立四个方面对大数据的存取过程和高并发情况下的代码逻辑做相应的优化处理,可以有效地提高企业二维码微信营销平台数据的读写效率,大幅度提升用户体验满足感。
本文呈现了在企业二维码微信营销平台中出现的高并发、大数据量的情况下,如何从数据库的设计,SQL语句的优化,算法结构的优化以及高效索引的建立等四个方面对代码逻辑所做的优化处理。对比优化前后的耗时数据可知,该优化方法使得企业二维码微信营销平台的读写效率得到了显著的提升。这些优化方法对处理大数据有一定的指导意义。
[1]马化腾.“互联网+”战略应上升至国家层面[EB/OL].http://tech.sina.com.cn/i/2015-03-04/doc-iawzuney0462159.shtml,2015-03-04.
[2]2016年中国互联网报告:人们最爱的还是微信朋友圈[EB/OL]. [2016-08-05].http://mt.sohu.com/20160805/n462722481.shtml.
[3]高珍,谢玉婧.电子商务系统中的大数据处理[J].计算机光盘软件和应 用,2012(21):111-112.
[4]谢姗姗,周国祥,石雷.多用户大数据量的数据库访问优化与设计[J].合肥工业大学学报(自然科学版),2014,37(11):1311-1316.
[5]宋亚奇,周国亮,朱永利,等.云平台下输变电设备状态监测大数据存储优化与并行处理[J].中国电机工程学报,2015(2).
[6]赵灼.浅谈如何优化SQL Server数据库[J].中国管理信息化,2014,17(3):125-127.
(责任编辑:覃华巧)
Large Data Optimization of Enterprise's QR Code WeChat Marketing Platform
Zhu Xiaoying1, Liang Chaoxiang2, Lu Keda3
(1. Graduate School, School of Computer and Information Security, Guilin University of Electronic Technology, Guilin 541004, China;2. 3. Wuzhou University, Wuzhou 543002, China)
In view of the problem of the high concurrency and low data processing efficiency of the enterprise's QR code WeChat marketing platform, the process of the large data access and the code logic in the case of large data and high concurrency are optimized, including the design of the database, the optimization of the SQL statement, the optimization of the algorithm structure and the establishment of efficient index. The results show that the reading and writing speed of the optimized system is significantly improved.
Marketing platform; Large data; High concurrency; Database
2016-09-28
TP311
A
1673-8535(2016)06-0009-07
朱肖颖(1991-),女,广西玉林市人,梧州学院信息与电子工程学院教师,桂林电子科技大学在读硕士,研究方向:软件工程。
梁朝湘(1967-),男,广西桂平市人,梧州学院信息与电子工程学院副教授,研究方向:数值模拟。
陆科达(1978-),男,广西贺州市人,梧州学院信息与电子工程学院高级系统架构师,研究生,研究方向:计算机软件和理论。