首页 文章 精选 留言 我的

精选列表

搜索[系统],共10012篇文章
优秀的个人博客,低调大师

大数据OLAP系统 (1)

数据生产面临的挑战 数据爆炸,每日使用最新维度对历史数据进行回溯计算。在Kylin的MOLAP模式下存在如下问题: 历史数据每日刷新,失去了增量的意义。 每日回溯历史数据量大,10亿+的历史数据回溯。 数据计算耗时3小时+,存储1TB+,消耗大量计算存储资源,同时严重影响SLA的稳定性。 预计算的大量历史数据实际使用率低下,实际工作中对历史的回溯80%集中在近1个月左右,但为了应对所有需求场景,业务要求计算近半年以上的历史。 不支持明细数据的查询。 引入MPP引擎,数据现用现算 历史数据预计算成本巨大,最好的办法就是现用现算,但现用现算需要强大的并行计算能力。 OLAP的实现有 MOLAP、ROLAP、HOLAP 三种形式。 MOLAP 以Cube为表现形式,但计算与管理成本较高。 ROLAP 需要强大的关系型DB引擎支撑。 长期以来,由于传统关系型DBMS的数据处理能力有限,所以ROLAP模式受到很大的局限性。随着分布式、并行化技术成熟应用,MPP引擎逐渐表现出强大的高吞吐、低时延计算能力,号称“亿级秒开”的引擎不在少数,ROLAP模式可以得到更好的延伸。单从业务实际应用考虑,性能在千万量级关联查询现场计算秒开的情况下,已经可以覆盖到很多应用场景,具备应用的可能性。例如:日数据量的ROLAP现场计算,周、月趋势的计算,以及明细数据的浏览都可以较好的应对。 MOLAP模式的劣势 应用层模型复杂,根据业务需要以及Kylin生产需要,还要做较多模型预处理。这样在不同的业务场景中,模型的利用率也比较低。 Kylin配置过程繁琐,需要配置模型设计,并配合适当的“剪枝”策略,以实现计算成本与查询效率的平衡。 由于MOLAP不支持明细数据的查询,在“汇总+明细”的应用场景中,明细数据需要同步到DBMS引擎来响应交互,增加了生产的运维成本。 较多的预处理伴随着较高的生产成本。 ROLAP模式的优势 应用层模型设计简化,将数据固定在一个稳定的数据粒度即可。比如商家粒度的星形模型,同时复用率也比较高。 App层的业务表达可以通过视图进行封装,减少了数据冗余,同时提高了应用的灵活性,降低了运维成本。 同时支持“汇总+明细”。 模型轻量标准化,极大的降低了生产成本。 综上所述,在变化维、非预设维、细粒度统计的应用场景下,使用MPP引擎驱动的ROLAP模式,可以简化模型设计,减少预计算的代价,并通过强大的实时计算能力,可以支撑良好的实时交互体验。 双引擎下的应用场景适配问题 架构上通过MOLAP+ROLAP双引擎模式来适配不同应用场景 技术权衡 MOLAP:通过预计算,提供稳定的切片数据,实现多次查询一次计算,减轻了查询时的计算压力,保证了查询的稳定性,是“空间换时间”的最佳路径。实现了基于Bitmap的去重算法,支持在不同维度下去重指标的实时统计,效率较高。 ROLAP:基于实时的大规模并行计算,对集群的要求较高。 MPP引擎的核心是通过将数据分散,以实现CPU、IO、内存资源的分布,来提升并行计算能力。在当前数据存储以磁盘为主的情况下,数据Scan需要的较大的磁盘IO,以及并行导致的高CPU,仍然是资源的短板。因此,高频的大规模汇总统计,并发能力将面临较大挑战,这取决于集群硬件方面的并行计算能力。传统去重算法需要大量计算资源,实时的大规模去重指标对CPU、内存都是一个巨大挑战。目前Doris最新版本已经支持Bitmap算法,配合预计算可以很好地解决去重应用场景。 MOLAP: 当业务分析维度相对固化,并在可以使用历史状态时,按照时间进行增量生产,加工成本呈线性增长状态,数据加工到更粗的粒度(如组织单元),减少结果数据量,提高交互效率。如上图所示,由A模型预计算到B模型,使用Kylin是一个不错的选择。 ROLAP: 当业务分析维度灵活多变或者特定到最新的状态时(如上图A模型中,始终使用最新的商家组织归属查看历史),预计算回溯历史数据成本巨大。在这种场景下,将数据稳定在商家的粒度,通过现场计算进行历史数据的回溯分析,实现现用现算,可以节省掉预计算的巨大成本,并带来较大的应用灵活性。这种情况下适合MPP引擎支撑下的ROLAP生产模式。 MPP引擎的选型 目前开源的比较受关注的OLAP引擎很多,比如 Greenplum、Apache Impala、Presto、Doris、ClickHouse、Druid、TiDB 等等,但缺乏实践案例的介绍,所以我们也没有太多的经验可以借鉴。于是,我们就结合自身业务的需求,从引擎建设成本出发,并立足于公司技术生态融合、集成、易用性等维度进行综合考虑,作为选型依据,最终我们平台部门选择了2018年刚进入Apache社区的Doris。 参考 https://tech.meituan.com/2020/04/09/doris-in-meituan-waimai.html

优秀的个人博客,低调大师

Feed流系统设计-总纲

简介 差不多十年前,随着功能机的淘汰和智能机的普及,互联网开始进入移动互联网时代,最具代表性的产品就是微博、微信,以及后来的今日头条、快手等。这些移动化联网时代的新产品在过去几年间借着智能手机的风高速成长。 这些产品都是Feed流类型产品,由于Feed流一般是按照时间“从上往下流动”,非常适合在移动设备端浏览,最终这一类应用就脱颖而出,迅速抢占了上一代产品的市场空间。 Feed流是Feed + 流,Feed的本意是饲料,Feed流的本意就是有人一直在往一个地方投递新鲜的饲料,如果需要饲料,只需要盯着投递点就可以了,这样就能源源不断获取到新鲜的饲料。 在信息学里面,Feed其实是一个信息单元,比如一条朋友圈状态、一条微博、一条咨询或一条短视频等,所以Feed流就是不停更新的信息单元,只要关注某些发布者就能获取到源源不断的新鲜信息,我们的用

优秀的个人博客,低调大师

如何系统地自学 Python?

一开始学习计算机技术和编程会有些困难:该选择哪个编程语言?用哪个IDE?以及更重要的,为什么选它? 在我看来,编程时最重要的事是选择最适合解决问题的工具。其次是选择自己最擅长的工具。如果我告诉你你应该用C++因为它是速度最快的编程语言之一,但是你没有过任何处理内存管理或者自己设计数据结构的经验的话,那这显然不是个好主意。你在编程中可能会很挣扎并且感觉很糟糕。 而Python解决了很多这些方面的问题。它比C++运行的慢的多,但也容易写的多。作为初学者的你可能往往并不太关心程序跑的有多快,你在意的只是搞一些酷炫的玩意,同时学一点编程的基本概念。 所以你需要做的第一个决定就是学习哪个编程语言。在数百种编程语言中,为什么初学者应该学习Python? 在生活中学会不断挖掘自己的潜力。我们都是一个普通人,可能并不清楚自己到底在哪方面占有优势。所以,学着在生活中找到自己的优势,并根据优势选择一定的就业方向。 不随波逐流。不要看周围的人做什么,自己就做什么,也许别人做的并不适合你。别人的优势很可能会成为你的劣势。所以,坚定自己的想法,让自己知道那些方面适合自己,自己可以胜任。 不断尝试可能成为自己的优势。你不知道什么适合自己,所以才要大胆、勇敢地尝试。找到一种可以属于你的独特的优势。 坚定信念。一旦你坚定了自己的信念,就不要被别人的意见或是讽刺或是嘲笑所干扰。别人不是你,不懂的你在想什么,不清楚你开始这件事的源头。你的事情,不了解你的人,没有资格轻易评说。 不茫然,不多想。别让太多的事干扰到你奋斗下去的信念。梦想不容许太多的杂念。那些杂念只会让你的心愈来愈脆弱,多为一个人考虑,到头来,伤害的还是自己。 择自己学习方法 每个人都有适合自己的方法,有的人去选择自学,有的人选择看视频学习,有的人选择报名培训班,那在这个时候,你就要自己考虑清楚,到底那样对的帮助是最大的,个人觉得是跟着培训班最好的,毕竟人家的实战项目多,我们学软件开发的都知道实战项目对于学好一门语言是 很重要的。 学习python有那些误区 具体里面的误区非常的多,那些就不需要我去写出来,我给你说的一般都是心态的问题,首先一个觉得自己会java和c++,然后我学习python就很牛,但是你要知道语言是有很多相同的地方,但是不是通用,一定要自己学习的仔细。还有一种就是觉得我不会英语,我要先去把英语学习好在来学python。因为自己想还坏主意然后学习,这样的都是容易找进误区的。 学习是对自己最好的投资,而机会属于有准备的人,这是一个看脸的时代,但最终拼的是实力。人和人之间的差距不在于智商,而在于如何利用业余时间,所以没有等出来的辉煌,只有干出来的精彩。其实只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间,而你之所以还没有变强,只因你还不够努力,要记得付出不亚于任何人的努力。 1、选择Python版本 对于Python工程师来说,Python的版本则是你们的工作环境。所以在学习之前一定要考虑选择一个合适自己的版本,Python3对零基础的小白很友好,易上手。选好版本后就可以开始学习了。 2、学习Python基础知 Python 是一个有条理的、强大的面向对象的程序设计语言。 首先需要学习Python的基础知识,下载、安装、导入库、字符串处理、函数使用等等。 如果你的英语不是很好,这里可以给你推荐一个超赞的网站一译中文文档,这里会提供Python、pandas、numpy、NLTk、Django等文档的中文翻译,赶紧添加到收藏夹里。如果你更喜欢看视频,可以上网找一些入门教程观看,有很多IT学习网站可以找到,这里就不推荐了。 此外,在基础知识都学会之后,你要开始练习写一个程序,需要文本编辑器——PythonEditors 3、确定学习方向 Python职业学习方向很多,职业方向大体上分为以下六个: Web全栈工程师、爬虫开发工程师、人工智能工程师、Python开发工程师、游戏开发工程师、搜索引擎工程师。 以下选了几个标准库是学习Python用得上且必须了解的: Django**、Flask**、Tornado**、NumPy**、Pandas**、Matplotlib**、Requests**、Scrapy**、threading**、scikit-learn**、TensorFlow** 4、寻找项目练手 只会埋头敲代码的Python开发肯定不是各大公司HR抢着要的,谨记:多找项目多找项目!多练手多练手!只有自己多动手写具体项目,才能更多的犯错,解决问题,位置后工作踩坑,现在练习踩的坑越多,以后和HR谈薪资的时候才会更有底气。 Github内的项目丰富,想找哪个项目可以先去Github上面搜索,例如:你想写一个知乎爬虫,在搜索框搜索“知乎”,然后在语言那一栏里选择Python就可以找到你想要的项目了。 最后,等这些都学的差不多了,你就可以去找工作了。

优秀的个人博客,低调大师

DApp游戏系统开发

DApp 作为区块链技术落地的重要一环,在 Ethereum、EOS 等开发平台的主网络陆续上线后有了一定的发展,而游戏 DApp 作为发展态势最迅猛的一类 DApp,吸引了众多开发者和传统机构的注意。从 2017 年 12 月的 CryptoKitties 到 2018 年 7 月的 Fomo3D,部分热门的游戏 DApp 一度让整个 Ethereum 网络瘫痪,并出现了大量的模仿其游戏机制的收集类、Ponzi 类、FOMO 类的游戏 DApp。在 EOS 平台主网络上线后,其快速确认、无手续费的特性使得竞猜类游戏大规模爆发,并因为 EOS 独特的机制设置,衍生出大量生态设施。 游戏 DApp 的大规模爆发虽然产生了巨量的交易额,但其中仍旧存在不少问题。集中于少数几个 DApp上 的交易额、开发平台与底层协议的稀缺、同质化的游戏机制、过高的用户门槛与使用门槛都在削弱玩家的游戏意愿;良莠不齐的代码质量、不开源的智能合约既不能发挥区块链的优势,又使玩家担忧资金安全。联系shewenfa 要开发一个DAPP,你首先得想明白该DAPP能解决什么问题,其次你要撰写一份项目白皮书,描述该DAPP使用的技术原理、共识机制等。想要从零开始开发一个完整的区块链项目太过复杂,所以目前普通的开发者大多会选择一个相对成熟的平台,依托平台成熟的开发环境来开发自己的DAPP。如此以来,DAPP的开发工作就简单了不少。 当前,DAPP的最流行的开发平台是Ethereum(以太坊)。Ethereum(以太坊)是一个图灵完备的区块链一站式开发平台,采用多种编程语言实现协议,采用Go语言写的客户端作为默认客户端。它允许任何人在平台中建立和使用通过区块链技术运行的分布式应用。我们可以把它理解为区块链领域的Android,它是一个开发平台,用户可以像基于Android Framework一样基于区块链技术开发应用 但随着技术的进步,尤其是在闪电网络、侧链技术等陆续落地之后,游戏的性能将有所提高,而传统游戏厂商的进入也将带来新的观念,游戏机制和通证机制的设置将更为合理与多样。而在技术落地之前,仅将虚拟资产上链的通证上链类游戏或许更易出现多样化的游戏玩法,同时,生态中部分机构或开发者人工地实现部分“跨链”效果。此外,随着开发平台的增多,不同种类的游戏或根据各自的操作需求、资产安全需求选择不同的开发平台,形成游戏种类与开发平台挂钩的状况。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle

Oracle

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat

Apache Tomcat

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse

Eclipse

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。