数据仓库和数据湖的学习笔记

概念 数据仓库是一个比较老的概念,好像有四五十年左右的历史了。它的出现,是为了弥补数据库的一些局限性。其中一个局限性是数据库在运行复杂的涉及大量数据的查询语句的时候,速度会很慢。数据仓库用Denormalization的方式把彼此相关的数据提前复制到同一个存储节点上,如果下次再有同时需要这些相关数据的请求,就不需要再去原始数据的存储节点上获取了。这节省了到处找数据的时间,但同时因为复制了数据所以1)增加了存储空间,2)增加了修改、删除部分数据的难度。对于经常需要大数据查询的业务,增加储存成本是可以接受的,且这些业务只关心历史数据,所以大家都是用ETL/ELT把数据从数据库里转出来,不太需要经常修改的删除数据。 数据湖是相对比较新的概念了,应该就一二十年的历史。从广义上理解,能把存储和计算分开在不同机器上进行的数据存储系统,都可以叫数据湖。从大家的普遍认知来说,数据湖的特点还包括:1)用户可以知道和掌握数据的存储位置和存储格式。2)数据可以没有定义好的结构(Schema),或者可以是半结构化(Semi-Schema)的,3)数据可以被多个查询引擎读取。 比较 数据仓库 数据湖 存算一体 是 否 结构化存储 是 否 成本 高 低 查询速度 快 慢 数据质量 可监督 不可监督 适合导入的数据 从数据库中用ETL/ELT导出数据 原始的非结构化的数据,或者第三方数据 Q&A Q:Hadoop是数据湖还是数据仓库? A:因为Hadoop不是存算一体的,所以它不是数据仓库。而狭义的数据湖是要依托于云的,所以Hadoop也不符合。但是Hadoop是符合广义的数据湖的,因为它存算分开了。 Q:Databrisks做的是数据湖吗? A:Databrisks声称自己做的叫lakehouse,也就是数据湖和数据仓库的合体,具备两者的特点。我的感觉是,首先它是基于Spark这个存算分开的系统的,所以它一定是数据湖,其次它似乎在此基础上做了优化,比如可能把常用数据放到计算节点上,用数据仓库的方式运行查询语句,那从这个角度,它也可以叫数据仓库。 Q:怎么总结数据仓库和数据湖的使用场景? A:数据仓库是用来分析过去的,而数据湖是用来预测未来的。展开来讲,就是进行大数据分析的时候,数据仓库更有优势,而进行AI模型运行的时候,从数据湖直接导入原始数据更有效率。 Q:日志适合用什么方式存储 A:我没有实践过,因为日志是半结构化的数据,存成数据湖更合适。但可能还是需要进行预结算使得能得到更快的查询速度。 引用 https://www.1point3acres.com/bbs/thread-851795-1-1.htmlhttps://developer.51cto.com/article/680650.htmlhttps://www.modb.pro/db/15808https://aws.amazon.com/cn/big-data/datalakes-and-analytics/what-is-a-data-lake/ https://www.smartcity.team/consultingskills/experience/shujukuyushujuhu/ https://www.techtarget.com/searchdatamanagement/definition/denormalization#:~:text=Denormalization%20is%20the%20process%20of,of%20each%20piece%20of%20information. https://databricks.com/discover/data-lakes/introduction

Read more

Nginx学习笔记

作为编程小学生,学习一下新接触的技术。 简述 Nginx(发音为:安紧腻克死)是一套产品的统称,它最基础的产品就是它的服务器(Web server),它的其他产品感觉都是基于这个产品衍生出来的。 竞品 它的竞品是 IIS, Apache HTTP Server。 我没关注过Apache的这款,但接触过IIS,它在微软的生态圈(Windows, C#, .Net)内用起来很方便。性能我没比较过,听说大部分基础功能Nginx是比Apache快的。 Flask 或者Django自带的服务器还不能入它的法眼,因为他们都太简单,只能用来过家家或者做测试,离商用还太遥远。Flask自己的网站也是这么告诉用户的 特点 那什么才叫不简单的,可商用的网页服务器呢?我举几个特点。 比如支持大规模的部署,可以允许好多台机器使用好多的计算资源(缓存,CPU等)处理大量的请求。 还比如有一些商业上常用的功能,比如身份验证(Authentication),数据监测(Monitoring), 流量管理(Traffic management),负载均衡(Load Balancing)之类的。 另外就是支持插件,开发者和使用者可以在它的基础上做自己想要的功能。 实践 那如果要建一个用Django写的网站怎么办呢?用Nginx的话,解决方法就是在Nginx和Django之间连上一个WSGI HTTP Server,比如用(Gunicorn)。这篇文章写的很好,也给了例子和代码。 外面的世界 <-> Nginx <-> Gunicorn <-> Django。 现实世界中,其中一个使用了Nginx的产品就是Kubernetes的Ingress了。 Ingress的作用就是一个服务器。Kubernetes自己有好几个功能都可以作为服务器建立后端与外界的链接,比如ClusterIP, NodePort, LoadBalancer,但都没Ingress好用。(参考:https://www.nginx.com/blog/kubernetes-networking-101/) Ingress其实就是在Nginx外套了一个壳。下面这个视频里讲了,我觉得讲非常通俗易懂,推荐。

Read more