概率图模型的一些总结 概率图模型是统计机器学习中比较重要的内容。在自然语言处理、时间序列分析、交通流量建模等领域有着比较广泛的应用。概率图模型不像LR、SVM、GBDT等机器学习算法比较简单和直观,理解起来往往比较抽象和困难:首先,从建模型上讲,概率图模型把训练数据抽象为相关的随机变量及其互相之间的依赖关系。LR、SVM等分类器更多的是把原始数据映射到一个高维的欧几里德空间。显然,从建模上讲,概率图模型没有明显...
深度学习和计算机视觉的一些思考和总结 做视觉和算法也有一年多了,是时候做一些必要的思考和总结。 最初接触深度学习是这样的,老大打算做一个深度学习框架在云环境下自动化部署的一个项目。之前对云这块还比较熟悉,误打误撞开始接触前段比较火的深度学习领域。这个任务还是比较简单的,只要把一个深度学习训练任务的各个步骤串联起来放到kubernetes里面run起来就ok了。对深度学习训练的一些基本知识有了初步的印象...
关于C++的一些思考和总结 最近一年半的时间,因为工作内容切换的缘故(从Infrastructure切换到DL和CV),开始大量使用C++作为开发工具。这一年多也花了不少时间在机器学习和算法的学习补充和积累上,也没有太多时间深入编程语言领域。年底了,忙里偷闲,这块的功课也可以做一个总结了。 开始工作的很长时间都是使用C语言,刚开始使用C++的时候很不习惯。正式接触是rocskdb这个项目,代码...
开源的OLAP引擎 大数据的声音虽然被AI掩盖,hadoop生态圈的各种轮子已经没有停下来的脚步。最近几天有空,梳理一下各种OLAP的计算和存储框架。纯计算框架(query engine)Impala C++ cloudera主导Drill drill的主要特点是支持多种的存储引擎和存储(HDFS HBase Mongo S3 ,json parquet,csv),查询前不需要etl工具做转换,直
谈一谈索引技术 熟悉关系数据库的人应该对索引不陌生。单列索引,多列索引,B树索引,位图索引,事务索引,三星索引等等。读研时期导师就说,索引可以作为一个研究课题搞一辈子。撇开最新的理论创新,即使了解过一些的研究成功,坑需要从一些大部头的著作看起。每年VLDB,sigmod上的关于索引的文章也很多。本文不打算过于深入,针对常见的一些索引技术做一些总结,算是入门知识吧。最常见的两种索引数据结构是B+树和LSM-
OLAP最新技术前瞻 最近一直忙机器学习,同时兼职一个开源的nosql项目,一直没更新博客。OLAP最近的发展也如火如荼,百度开源的palo,tidb退出的tispark,前段易观的olap比赛。先列一下几个技术方向,有空后面具体探讨: 1. CBO designed for distributed storage 2. code gen 3. vector acc
2pc vs 3pc && spanner 2PC的缺点,有很多约束条件,是一个blocking协议。协调者coordinator,参与者cohort都必须是高可用的,不能永久性故障。这点无可厚非,这会带来工程实现的复杂度,一般是通过数据复制实现高可用,通过paxos来保持副本一致性。coordinator、cohort必须把自己的状态持久化存储,重启后可以回放。这点不仅会带来工程实现的复杂度(rdbms的r
raft比较容易混淆的问题 对于写请求,raft是一段提交,只要大部分follower回复append entry success,那么leader就修改本地的commit log index,并回复client成功。从这个角度上看,raft是一段提交。对于读请求,如果允许follower提供读服务,那么要leader下一次的append entry 请求中把当前的commit index发给follower,follo
如何构建一个单机高性能服务器 如何在现代硬件架构下构建一个高性能的服务器软件从方法论上,可以考虑自底向上(充分利用硬件的特性)和自顶向下(从应用本身的特点考虑)两个维度来思考自底向上硬件层增加程序并行程度,充分利用多核效率减少RISC架构下分支预测失败的概率(intel cpu也是采用了指令流水线和分支预测技术)cpu cache友好性,高性能的cache置换算法,cache遗忘算法
数据结构和算法的一些小结 索引 通过数据的冗余和预计算,以减少io次数和逻辑判断的消耗,最终提高查询的速度。索引的副作用 索引的加载、修改,会带来额外的IO和锁的消耗。协程 把cpu的调度和上下文切换的工作,交给程序员控制的应用代码,而不是OS内核或者虚拟机,主要应用于RPC调用比较多的场景。 补充:能在变成语言级别实现的是一种比较优雅的方式,例如golang,l
Flash卡的技术入门 背景知识:Flash卡的硬件基础是闪存颗粒nand,nand跟RAM(main memory)比,其电器特性有很大不同。nand不能支持直接写入,必须先擦除之前的数据,然后再写入;nand对于擦除的次数是有限制的,超过多少次之后不保证写入的数据可以正确读出。目前国内一线电商公司已经在带规模使用Flash卡,主要作为关系数据库的持久化存储设备,甚至有跑nosql的。带来的技术
常见的join算法 大表的Join算法无论在传统的关系数据库、在OLAP数据仓库还是在离线批处理系统中都是至关重要的一个算法。大表Join利用的数据冗余特性(join列在两个表都做存储),为用户的数据统计需求,提供了一个单间的视图,不需关心底层数据的存储格式、join的处理过程等等。关于Join算法的选择、多表Join的顺序等问题,涉及到比较复杂的查询优化的技术,采用了动态规划、遗传算法、启发式搜索等比较前沿性技
小众技术书籍推荐 主要推荐一些不是太有名气但是比较专业非常值得一看的书籍,有些可能没有中文译本:《大规模web开发技术》主要讲了hatena如何从一个很小的网站发展成为一个大规模网站的技术历程,遇到了哪些问题,采用了哪些技术;对于致力于web网站架构方面具有很大意义。hetana主要是一个博客类网站,涉及技术跟社交服务较多。《A brief guide to the emerging world of
DPDK关键技术点 DPDK是intel推出的高效的zero-copy的发包工具,许多同学对其中的关键技术并不太了解,这里罗列一些粗略的技术点,感兴趣的可以针对其中某些点深入研究。补充一点,intel最近推的SPDK跟DPDK类似,SPDK是跨设备IO,SPDK更复杂,需要考虑读写冲突、IO调度和不同硬件特性的优化(后面有时间研究下)。这里单说DPDK的技术用户态驱动实现zero-copy。如果使用l
为什么redis中会采用skiplist redis既然是单线程,采用skiplist作为索引,相对于传统的红黑树而言,查询速度相仿,优势在哪里关键在于redis是一个经常需要做插入删除操作的kv容器。redis有超时剔除机制,需要对key维护一个时间维度的索引或者队列,剔除超时的记录。剔除同时就需要对索引进程插入删除操作skiplist插入删除worst case的时间复杂度会比红黑树小很多
数据削重的利器--cuckoo filter 最近再看Bloom Filter的删除问题,偶然间看到cuckoo filter的数据结构。Bloom Filter的思想是通过多维hash的办法,降低hash冲突的概率.。Basic Bloom Filter仅存储位图信息,只能判断一个key是否在集群内,可能存在假阳性(false positive),不存在假阴性(false negtive)。counting bloom filter还可以做
网络硬件的一些认识 假期时间看了一本介绍网络硬件的书《图解网络硬件》,作者日本的,文笔比较朴实,干货不少,网络硬件设备的发展历史介绍的比较详细。之前对于网络设备的有些零散的认识,比如mac地址学习,vlan,路由协议之类,没有系统的学习过。最近搞docker相关的sdn研究,刚好凑这个机会对完了过做了一次系统的学习,看这本书的收获还是很大的。书中具体的知识不再详细介绍,在此谨把个人认为重要的知识点总结一下,有兴趣的同
RDBMS实现技术的难点--专业的DBA需要了解哪些 系统软件中,RDBMS技术实现和运用掌握,可以说是最为困难的一个,甚至不是之一。 操作系统内核,涉及底层技术和算法,不同操作系统的发展殊途同归,在关键的数据结构和算法上的选择基本是一致,不那么容易让人产生混淆。linux的迅速发展中就借鉴了很多Unix/Solaris的技术。 不同的关系数据库,对于关键技术的实现由很大不同,提高了使用者的技术门槛,其使用方法和试用场景也
关于快照隔离和幻影读的一些深入思考 大家知道mysql的隔离级别有四种:read uncommitted,read committed,read repeatable,serializable 对于前面三种的区别,比较容易理解,不在赘述。关键是第三种个第四种的区别,不太好理解。 这里举个前段时间微信公众号上看到的一个例子大致是这么说的:table credit上面记录了每个用户的消费记录,
谷歌技术栈(old)和业界的对比 假期第一天下大雨没出门,顺便写下技术博客。 上面的是google的技术栈,可以自行google搜索。已经比较老了,比如F1、TensorFlow还没有加进来。 自底向上的分析吧分布式锁和统一配置管理开源社区的从最初的zk到etcd,已经有很多选择,有的分布式系统中还会自己造个轮子(例如ceph的ceph monitor)。zk有自己的zab协议,