数据量很大,分页查询很慢,有什么优化方案?
数据写入遇到的第一个问题是,海量数据直接写入Clickhouse的话,会导致ZK的QPS太高,解决方案是改用Batch方式写入。Batch设置多大呢,Batch太小的话缓解不了ZK的压力,Batch也不能太大,不然上游内存压力太大,通过实验,最终我们选用了大小几十万的Batch。 第二个问题是,随着数据量的增长,单QQ看点的视频内容每天可能写入百亿级的数据,默认方案是写一张分布式表,这就会造成单台机器出现磁盘的瓶颈,尤其是Clickhouse底层运用的是Mergetree,原理类似于HBase、RocketsDb的底层LSM-Tree。在合并的过程中会存在写放大的问题,加重磁盘压力。峰值每分钟几千万条数据,写完耗时几十秒,如果正在做Merge,就会阻塞写入请求,查询也会非常慢。我们做的两个优化方案:一是对磁盘做Raid,提升磁盘的IO;二是在写入之前进行分表,直接分开写入到不同的分片上,磁盘压力直接变为1/N。 第三个问题是,虽然我们写入按照分片进行了划分,但是这里引入了一个分布式系统常见的问题,就是局部的Top并非全局Top的问题。比如同一个内容ID的数据落在了不同的分片上,计算全局Top100阅读的内容ID,有一个内容ID在分片1上是Top100,但是在其它分片上不是Top100,导致汇总的时候,会丢失一部分数据,影响最终结果。我们做的优化是在写入之前加上一层路由,将同一个内容ID的记录,全部路由到同一个分片上,解决了该问题。 介绍完写入,下一步介绍Clickhouse的高性能存储和查询。 3、高性能-存储-查询 Clickhouse高性能查询的一个关键点是稀疏索引。稀疏索引这个设计就很有讲究,设计得好可以加速查询,设计不好反而会影响查询效率。我根据我们的业务场景,因为我们的查询大部分都是时间和内容ID相关的,比如说,某个内容,过去N分钟在各个人群表现如何?我按照日期,分钟粒度时间和内容ID建立了稀疏索引。针对某个内容的查询,建立稀疏索引之后,可以减少99%的文件扫描。
还有一个问题就是,我们现在数据量太大,维度太多。拿QQ看点的视频内容来说,一天流水有上百亿条,有些维度有几百个类别。如果一次性把所有维度进行预聚合,数据量会指数膨胀,查询反而变慢,并且会占用大量内存空间。我们的优化,针对不同的维度,建立对应的预聚合物化视图,用空间换时间,这样可以缩短查询的时间。 我们这里听取的是Clickhouse官方的建议,借助ZK实现高可用的方案。数据写入一个分片,仅写入一个副本,然后再写ZK,通过ZK告诉同一个分片的其他副本,其他副本再过来拉取数据,保证数据一致性。 这里没有选用消息队列进行数据同步,是因为ZK更加轻量级。而且写的时候,任意写一个副本,其它副本都能够通过ZK获得一致的数据。而且就算其它节点第一次来获取数据失败了,后面只要发现它跟ZK上记录的数据不一致,就会再次尝试获取数据,保证一致性。
2、海量数据-写入 在科技行业中,年龄歧视已经存在,除非您可以证明自己已经有相当丰富的经验,否则他们不会给40多岁的你机会去学习。 在科技行业,技术工人可以在29岁就开始经历年龄歧视,而其他行业的平均年龄为41岁。 我们经常听到的一句话就是,你可以任意责骂年纪大的老员工,因为他们上有老下有小,他们指着工资生活。而如果你责骂90后,00后,他们可能第二天就不会来公司上班了。 年龄歧视不仅出现在找工作的时候,当你已经参加工作的时候,在培训机会的时候,你也会遭到年龄歧视。如果您年纪大了,培训和晋升机会一般都不会降临到你的头上。公司会给年轻的员工更多的机会,因为他们比你更有朝气,更有活力,更能吃苦。 很多公司抱怨老员工倚老卖老,不思进取,其实在软件开发领域,作为开发人员很少有不学习的,因为开发技术更新迭代非常快,如果你始终吃老本,你将很快被淘汰。因此,很多老年人也是会不断学习新技术的,而对于新技术感到恐惧的人更多地是转向了产品经理或者项目经理。 科技行业中年龄歧视的另一个问题就是薪水,和其它职业不太相同,大部分的公司更愿意给年轻的新员工高薪水,而不愿意加高薪给老员工,除非那个老员工有比别人优秀很多倍的能力。 让一个有着十年经验的软件工程师拿着和毕业生一样的薪水,这想想就不可能,因此,有时候不是老员工不想继续做开发,而是找不到高薪水的工作而已。 如果你的年龄确实很大,那么避免被歧视的最好办法就是不断提高自己的业务水平,不断提升自己的技术水平,如果你的能力足够强,公司是愿意花费巨额薪水聘用你的,前提是你的技术可以独当一面。 如果你的年龄确实很大,确实也没有找到适合的工作,那么为自己工作也是一个不错的选择。只要你有能力,很多远程的工作正等着你,很多线上的机会正在等着你,很多副业收入在等着你。
如果你不想被 (编辑:鹤壁站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |