- 浏览: 11676 次
文章列表
由于公司数据平台对ETL开发工具做了比较好的封装,较大程度上面提升了开发效率,数据开发同学的主要工作集中在写SQL,疲于应付各种各样庞大的业务需求。不少同学认为做数据开发没技术含量,技术上面没提升,久而久之产生厌烦感。
个人认为造成这种想法的主要原因是:
通过ETL方式解决一个点的需求,没有站在一个全局的角度来思考问题,建设数据,没有任何沉淀和反思。
对数据开发没有一个清晰地定位,其实建设数据是一件非常有挑战的工作。
面临的问题
数据仓库是一种体系结构,首先摆在我们面前的问题:
如何高效理解业务,将复杂业务用简单的模型来表示(建模),最终落地点是数据仓库或者数据 ...
java泛型之通配符
- 博客分类:
- 编程语言
java语言是符合里氏替换原则的,即任何基类可以出现的地方,子类一定可以出现。
为了获取更大限度的灵活性,要在表示生产者或者消费者的输入参数上使用通配符类型,PS:通配符用于声明形参,不能用于类和创建对象上。
声明上下界
list<? extends Number>:定义下界,说明List中可能包含的元素类型是Number及其子类
List<? super Number>:定义上界,则说明List中包含的是Number及其父类
PECS原则
PECS指“Producer Extends,Consumer Super”。换句话说,如果参数 ...
netty高性能之道
- 博客分类:
- 系统架构
Netty是一个NIO框架,使用它可以简单快速地开发网络应用程序,以较低成本交付来换取更大的吞吐量和可用性。
平时用过jts,但用到的只是局部功能,停留在简单使用阶段,对jts没有一个全面系统的认识,遇到问题不知道如何通过jts解决,这里通过jts做下简单梳理,希望以后遇到gis问题能借助jts来解决掉,避免重复造车。
jts是围绕几何图形以及几何图形之间的算法、数据结构展开的,我们从几何图形数据结构算法以及常用操作来切入代码。
关键组件:
Geometry
所有几何图形的抽象,且方法都是线程安全的。
image
通常Geometry都会包含一个Envelope,这个Envelope恰好包含图形的所有点。
如何构造
WKTReader:用于将wkt
场景:9点上班时,发现9点半有一个需求评审会
场景
理解JAVA NIO之前先了解下Linux IO类型是非常有帮助的。
缓存 I/O
缓存 I/O 又被称作标准 I/O,大多数文件系统的默认 I/O 操作都是缓存 I/O。在 Linux 的缓存 I/O 机制中,操作系统会将 I/O 的数据缓存在文件系统的页缓存( page cache )中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。
缓存 I/O 的缺点:
所谓分布式系统简单来说就是通过一些手段将计算能力以及存储能力分散到多台服务器上面,随之带来了一些问题涉及数据分布、数据复制、一致性、容错等。
分布式系统面临的第一个问题就是数据分布,即将数据均匀地分布到多个存储节点。另外,为了保证可靠性和可用性,需要将数据复制多个副本,这就带来了多个副本之间的数据一致性问题。
分布式系统中的服务器故障率很高,要求系统能够在软件层面实现自动容错。比如当存储节点出现故障时,系统能够自动检测出来,并将原有的数据和服务迁移到集群中其他正常工作的节点。
一些概念
性能
主要指系统的吞吐能力以及系统的响应时间。
其中,系统的吞吐能力指系统在某一段时间可以处理 ...
遇到以下问题如何解决?
查询客户各个日期的历史累积购买金额
查询每个客户第一次(首购)或前N次购买记录
查询每个客户最后一次购买记录
某活动推广后,每天的累积数据
查询客户每天的历史累积购买金额
历史累积
hive 语法:
SELECT
userid user_id,
pay_datekey pay_datekey,
pay_amount pay_amount,
SUM(pay_amount) OVER (PARTITION BY userid ORDER BY pay_datekey ROWS BETWEENUNBOUNDED PRECEDIN ...
题目:https://leetcode.com/problems/lru-cache/
大学课本在讲操作系统的时候提及LRU可基于双向链表以及map来实现: 其中双向链表用于调整优先级,根据LRU规则淘汰对象; map主要用于快速查询。
将题目分解:
get 操作涉及优先级调整
set 操作涉及优先级调整以及淘汰操作
将题目转化为实现head()以及evict()两个函数;
evict 淘汰队尾,有两种情况 1)队尾前面无节点,即:又是队首又是队尾 2)前面有节点
head 将操作的节点放到队首,如果已经位于队首则无需操作: 1)这个元素之前已经存在于队 ...
现在的计算机,cpu在计算的时候,并不总是从内存读取数据,它的数据读取顺序优先级是:寄存器-高速缓存-内存。线程耗费的是CPU,线程计算的时候,原始的数据来自内存,在计算过程中,有些数据可能被频繁读取,这些数据被存储在寄存器和高速缓存中,当线程计算完后,这些缓存的数据在适当的时候应该写回内存。当多个线程同时读写某个内存数据时,就会产生多线程并发问题,涉及到三个特性:原子性,有序性,可见性。 支持多线程的平台都会面临 这种问题,运行在多线程平台上支持多线程的语言应该提供解决该问题的方案。
线程安全
线程安全以及如何保证
线程的working memory是cpu的寄存器和高速缓存的抽象描 ...
在mysql中,索引是存储引擎用于快速查找到目标记录的一种数据结构。常见的索引类型包含B树索引、哈希索引、空间索引(R-Tree)、全文索引等。
索引是在存储引擎层实现的,不同的存储引擎对索引的工作方式并不一样。
下面重点介绍B树索引以及innodb和myisam存储引擎。
选择B树的原因
读写磁盘代价最高的环节是寻道,按照顺序访问范围数据是很快的,这有两个原因:
顺序I/O不需要多次寻道,所以比随机I/O要快很多(特别是对于机械硬盘)。
如果服务器能够按需要顺序读取数据,那么就不需要额外的排序操作,并且goup by查询无需再做排序和将行按组进聚合计算了。
索引本身可能很 ...
linux bash基础之流程控制
- 博客分类:
- linux系统
条件语句
算术比较
条件通常被放置在封闭的中括号内。一定要注意在[或]与操作数之间有一个空格。如果忘记了这个空格,脚本就会报错。例如:[ $var-eq 0 ] var等于0时,返回真 ; [ $var-ne 0 ]var为非0时,返回真
重要的操作符:
语法
作 用
-gt
大于。
-lt
小于。
-ge
大于或等于。
-le
小于或等于
-eq
等于
一个完整运行的 Linux 系统包括很多子系统(介绍,CPU,Memory,IO,Network,…),监测和评估这些子系统是性能监测的一部分。我们往往需要宏观的看整个系统状态,也需要微观的看每个子系统的运行情况。
系统由若干子系统构成,通常修改一个子系统有可能影响到另外一个子系统,甚至会导致整个系统不稳定、崩溃。所以说优化、监测、测试通常是连在一起的,而且是一个循环而且长期的过程,通常监测的子系统有以下这些:
CPU
Memory
IO
Network
这些子系统互相依赖,了解这些子系统的特性,监测这些子系统的性能参数以及及时发现可能会出现的瓶颈对系统优化很有帮助。
应用 ...
本文从操作系统层面和硬件层面介绍了并发编程需要了解的一些底层内容,知道底层知识对理解并发和写好多线程程序有较大的帮助,做到知其然并知其所以然。
操作系统
任务类型
任务可以划分为I/O消耗性和处理器消耗型:
I/O消耗型是指进程大部分时间用来提交I/O请求或者等待I/O请求,这样的进程经常处于可运行状态,但是通常都是运行短短的一会儿,因为他在等待更多的I/O请求时最后会阻塞。
处理器消耗型是指进程把大多时间都用在执行代码上。除非被抢占,否则他们通常一直处于不停地运行状态,因为他们没有太多的I/O请求,对于这类处理器消耗型的进程调度策略往往是尽量降低它的调度频率,而延长其运行时 ...
在工程实践中需要解决以下问题:1)检索门店附近一定范围内的活跃顾客,之后可以对顾客进行营销,比如通过push方式给顾客发送促销消息,从而达到拉新的目的 2)检索空间指定区域内,如某个商圈内或者某个商场内的顾客,进行有针对性的营销 3)判断点在哪个区域内,比如查询用户所在的商圈、所在的大学等等。这些功能作为基础服务,需要系统具备很高的性能,低时延、高吞吐。
本文主要介绍如何实现:1)检索指定坐标一定范围内的顾客 2)检索区域(如商圈、购物中心)内的顾客。
数据结构
程序=数据结构+算法,处理问题的关键点是选择合适的数据结构以及算法。空间索引是解决这类问题的利器,常用的空间索引数据结构包含 ...
数据仓库是一个面向主题的、集成的、稳定的、反映时间变化的,用于支持管理决策的数据集合, 需要具备可读性,保证数据一致。数据仓库有两位大师 William H.Inmon 和 Ralph Kimball。
Inmon 是正统的学术派,比较强调自上而下的建模,强调从源系统的业务与数据出发,在企业全局高度进行业务对象抽象,建立企业级数据仓库系统。
Kimball 是强调从数据仓库应用角度出发,自下而上的建模。强调以空间换时间、采用星形数据模型、适当雪花化的处理手段建立数据仓库应用模型;强调采用一致的维度来保证各个模型数据统计的一致性。
两个学派各有应用场景:
Inmon 对业务模式稳定 ...