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

概念 数据仓库是一个比较老的概念,好像有四五十年左右的历史了。它的出现,是为了弥补数据库的一些局限性。其中一个局限性是数据库在运行复杂的涉及大量数据的查询语句的时候,速度会很慢。数据仓库用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

换Domain后迁移WordPress遇到的小麻烦

Background 换了个.com的域名,想着还是用同样的host,所以觉得把文件复制到新域名的文件夹下就好,连数据库也没动。 Problem 万万没想到,没成功!能显示首页的文字,但是css, js之类的都加载不出来。访问demin.com/wp-admin会跳转到原来旧www.lidemin.pw的网页上,由于旧域名过期了,所以啥也显示不出来。 Solution Google is my best frient. 试了一些方法,最后起效的是修改数据库中wp-options表里的home和siteurl。 把它们改成新的域名就好了。然后demin.com/wp-admin就能访问咯。。 谢谢 Demin

Read more

Leetcode C# Solutions

Reverse Linked List /** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNode next; * public ListNode(int x) { val = x; } * } */ public class Solution { public ListNode ReverseList(ListNode head) { ListNode pre = null, cur = null, next = null; cur =…

Read more

Convertion between GRE and VLAN mode in OpenStack (OpenStack GRE和VLAN模式相互转换)

Convert from GRE to VLAN I refer to the VLAN configuration official documents 1. Edit the /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini file both in network node and computer node. Comment or delete GRE configuration and append VLAN configuration: [ovs] tenant_network_type = vlan network_vlan_ranges = physnet1:1:4094 bridge_mappings = physnet1:br-DATA_INTERFACE

Read more

mininet部分功能的实现方法

    我在上一篇日志用unshare创建轻量级虚拟环境中介绍了如何用系统调用unshare创建一个虚拟机. 这一个方法正是参照了mininet的实现方式, 我将其用C语言实现, 达到了mininet中创建虚拟网络节点(包括主机和交换机)的效果. 这一篇文章中, 我想直接引用mininet的代码来阐述实现的方法. 除此之外, 我还会介绍mininet识别网络节点输出的结束, 以及中断进程,接收命令, 创建虚拟网卡等功能的实现.

Read more

用unshare创建轻量级虚拟环境

    在测试和使用openvswitch的时候, 一部分人会使用KVM(kernel virtual machine)创建虚拟机.但KVM需要有一定的硬盘的支持, 还传说需要CPU支持虚拟化. 而也有一部分人使用LXC. LXC是一个轻量级的虚拟化技术, 占用的空间更小, 门槛也更低. 有兴趣的同学可以看一下 http://lxc.sourceforge.net/(需翻墙) https://help.ubuntu.com/12.04/serverguide/lxc.html     在Mininet中, 开发者也用了类似的方法生成虚拟环境. 在对mininet的代码研究的时候, 我觉得我可以把一些基础的功能捡出来, 然后用C实现. 这一时兴起才有了我编的小程序和这篇总结的文章.

Read more

Pox的框架及启动过程分析

    Pox作为OpenFlow的一种控制器, 具有能将交换机送上来的协议包交给指定软件模块的功能. 使用过Pox的都知道, 组件和事件是Pox的两个重要概念, 它们两个共同撑起了Pox的大部分功能. Pox的事件和组件的协调工作机制可以参见伟辰同学的POX事件系统分析. 而这篇文章主要讲的是Pox的大体结构并简要介绍Pox是如何启动的.

Read more

Pox中recoco代码阅读笔记

    位于/pox/lib/recoco中的recoco.py在Pox中起到是任务队列的作用. 也就是说, 除了常规的监听交换机送上来的事件这个任务外, Pox还提供了方法给用户添加自己的任务进Pox中. 对于什么时候需要添加自己的任务, 我还没得到一个合理准确的答案. 目前我觉得, 我们的"任务"需要和监听交换机事件同等级. 在recoco/example.py中, 开发者给出的例子是收集与交换机连接的socket并对socket进行处理. 本文将分为两个部分. 第一个部分讲解如何将自己的任务添加入任务队列中, 第二个说明Pox实现该功能的方法. 一. 添加我们自己的任务

Read more