自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (3)
  • 收藏
  • 关注

原创 海量数据查询的一些关键技术

MPP架构,数据并行化处理垂直切分,列式存储,列存储只需要将需要查询的数据列load到内存即可,且列式存储压缩比很高,例如bigtable/hbase等列族数据存储、dremel/impala的parquet数据格式水平切分,数据sharding,DRDS,mycat之类对mysql表进行简单的分表query predicate push down,查询谓词下推,在一个查询

2016-09-27 00:31:19 3865

原创 解决关系数据库的性能问题的几个思路

对于传统的单机数据库rdbms,很难满足海量用户的并发需求,都有哪些技术手段解决 这个问题?数据库前面加一层分布式缓存放弃传统的rdbms,采用一个支持持久化存储的分布式的key-value分布式存储考虑rdbms自身做scale-out,例如读写分离,分库分表单机的硬件加速,db主机加内存,存储换成pcie-ssd/全闪存阵列

2016-04-06 11:36:23 1538

原创 分布式文件系统的副本分布策略

分布式存储系统中,副本在节点间的分布策略,对于快速定位数据的位置,以及整个系统的网络流量、节点间io负载均衡,非常重要。副本分布策略,大致分为三种:1.基于统计和监控的副本分布策略;2.基于一致性hash的副本分布策略;3.基于伪随机算法的副本分布策略;

2016-04-01 15:34:27 4479

原创 概率图模型的一些总结

概率图模型是统计机器学习中比较重要的内容。在自然语言处理、时间序列分析、交通流量建模等领域有着比较广泛的应用。概率图模型不像LR、SVM、GBDT等机器学习算法比较简单和直观,理解起来往往比较抽象和困难:首先,从建模型上讲,概率图模型把训练数据抽象为相关的随机变量及其互相之间的依赖关系。LR、SVM等分类器更多的是把原始数据映射到一个高维的欧几里德空间。显然,从建模上讲,概率图模型没有明显...

2019-03-17 17:47:35 377

原创 深度学习和计算机视觉的一些思考和总结

        做视觉和算法也有一年多了,是时候做一些必要的思考和总结。        最初接触深度学习是这样的,老大打算做一个深度学习框架在云环境下自动化部署的一个项目。之前对云这块还比较熟悉,误打误撞开始接触前段比较火的深度学习领域。这个任务还是比较简单的,只要把一个深度学习训练任务的各个步骤串联起来放到kubernetes里面run起来就ok了。对深度学习训练的一些基本知识有了初步的印象...

2019-01-18 23:28:53 1170

原创 关于C++的一些思考和总结

        最近一年半的时间,因为工作内容切换的缘故(从Infrastructure切换到DL和CV),开始大量使用C++作为开发工具。这一年多也花了不少时间在机器学习和算法的学习补充和积累上,也没有太多时间深入编程语言领域。年底了,忙里偷闲,这块的功课也可以做一个总结了。       开始工作的很长时间都是使用C语言,刚开始使用C++的时候很不习惯。正式接触是rocskdb这个项目,代码...

2019-01-18 22:15:03 471

原创 开源的OLAP引擎

大数据的声音虽然被AI掩盖,hadoop生态圈的各种轮子已经没有停下来的脚步。最近几天有空,梳理一下各种OLAP的计算和存储框架。纯计算框架(query engine)Impala C++ cloudera主导Drill drill的主要特点是支持多种的存储引擎和存储(HDFS HBase Mongo S3 ,json parquet,csv),查询前不需要etl工具做转换,直

2017-12-25 20:23:30 4191

原创 谈一谈索引技术

熟悉关系数据库的人应该对索引不陌生。单列索引,多列索引,B树索引,位图索引,事务索引,三星索引等等。读研时期导师就说,索引可以作为一个研究课题搞一辈子。撇开最新的理论创新,即使了解过一些的研究成功,坑需要从一些大部头的著作看起。每年VLDB,sigmod上的关于索引的文章也很多。本文不打算过于深入,针对常见的一些索引技术做一些总结,算是入门知识吧。最常见的两种索引数据结构是B+树和LSM-

2017-12-19 15:41:44 1603

原创 OLAP最新技术前瞻

最近一直忙机器学习,同时兼职一个开源的nosql项目,一直没更新博客。OLAP最近的发展也如火如荼,百度开源的palo,tidb退出的tispark,前段易观的olap比赛。先列一下几个技术方向,有空后面具体探讨:       1. CBO designed for distributed storage       2. code gen        3. vector acc

2017-12-15 11:18:47 749

原创 2pc vs 3pc && spanner

2PC的缺点,有很多约束条件,是一个blocking协议。协调者coordinator,参与者cohort都必须是高可用的,不能永久性故障。这点无可厚非,这会带来工程实现的复杂度,一般是通过数据复制实现高可用,通过paxos来保持副本一致性。coordinator、cohort必须把自己的状态持久化存储,重启后可以回放。这点不仅会带来工程实现的复杂度(rdbms的r

2016-12-07 22:16:57 1496

原创 raft比较容易混淆的问题

对于写请求,raft是一段提交,只要大部分follower回复append entry success,那么leader就修改本地的commit log index,并回复client成功。从这个角度上看,raft是一段提交。对于读请求,如果允许follower提供读服务,那么要leader下一次的append entry 请求中把当前的commit index发给follower,follo

2016-12-05 20:52:12 3065

原创 如何构建一个单机高性能服务器

如何在现代硬件架构下构建一个高性能的服务器软件从方法论上,可以考虑自底向上(充分利用硬件的特性)和自顶向下(从应用本身的特点考虑)两个维度来思考自底向上硬件层增加程序并行程度,充分利用多核效率减少RISC架构下分支预测失败的概率(intel cpu也是采用了指令流水线和分支预测技术)cpu cache友好性,高性能的cache置换算法,cache遗忘算法

2016-10-26 15:16:35 1445

原创 数据结构和算法的一些小结

索引     通过数据的冗余和预计算,以减少io次数和逻辑判断的消耗,最终提高查询的速度。索引的副作用     索引的加载、修改,会带来额外的IO和锁的消耗。协程     把cpu的调度和上下文切换的工作,交给程序员控制的应用代码,而不是OS内核或者虚拟机,主要应用于RPC调用比较多的场景。     补充:能在变成语言级别实现的是一种比较优雅的方式,例如golang,l

2016-10-26 13:10:22 427

原创 Flash卡的技术入门

背景知识:Flash卡的硬件基础是闪存颗粒nand,nand跟RAM(main memory)比,其电器特性有很大不同。nand不能支持直接写入,必须先擦除之前的数据,然后再写入;nand对于擦除的次数是有限制的,超过多少次之后不保证写入的数据可以正确读出。目前国内一线电商公司已经在带规模使用Flash卡,主要作为关系数据库的持久化存储设备,甚至有跑nosql的。带来的技术

2016-10-20 19:41:40 2119

原创 常见的join算法

大表的Join算法无论在传统的关系数据库、在OLAP数据仓库还是在离线批处理系统中都是至关重要的一个算法。大表Join利用的数据冗余特性(join列在两个表都做存储),为用户的数据统计需求,提供了一个单间的视图,不需关心底层数据的存储格式、join的处理过程等等。关于Join算法的选择、多表Join的顺序等问题,涉及到比较复杂的查询优化的技术,采用了动态规划、遗传算法、启发式搜索等比较前沿性技

2016-10-17 12:41:41 6232

原创 小众技术书籍推荐

主要推荐一些不是太有名气但是比较专业非常值得一看的书籍,有些可能没有中文译本:《大规模web开发技术》主要讲了hatena如何从一个很小的网站发展成为一个大规模网站的技术历程,遇到了哪些问题,采用了哪些技术;对于致力于web网站架构方面具有很大意义。hetana主要是一个博客类网站,涉及技术跟社交服务较多。《A brief guide to the emerging world of

2016-10-13 23:13:33 891

原创 DPDK关键技术点

DPDK是intel推出的高效的zero-copy的发包工具,许多同学对其中的关键技术并不太了解,这里罗列一些粗略的技术点,感兴趣的可以针对其中某些点深入研究。补充一点,intel最近推的SPDK跟DPDK类似,SPDK是跨设备IO,SPDK更复杂,需要考虑读写冲突、IO调度和不同硬件特性的优化(后面有时间研究下)。这里单说DPDK的技术用户态驱动实现zero-copy。如果使用l

2016-10-13 11:47:05 3570

原创 为什么redis中会采用skiplist

redis既然是单线程,采用skiplist作为索引,相对于传统的红黑树而言,查询速度相仿,优势在哪里关键在于redis是一个经常需要做插入删除操作的kv容器。redis有超时剔除机制,需要对key维护一个时间维度的索引或者队列,剔除超时的记录。剔除同时就需要对索引进程插入删除操作skiplist插入删除worst case的时间复杂度会比红黑树小很多

2016-10-13 11:01:32 996

原创 数据削重的利器--cuckoo filter

最近再看Bloom Filter的删除问题,偶然间看到cuckoo filter的数据结构。Bloom Filter的思想是通过多维hash的办法,降低hash冲突的概率.。Basic Bloom Filter仅存储位图信息,只能判断一个key是否在集群内,可能存在假阳性(false positive),不存在假阴性(false negtive)。counting bloom filter还可以做

2016-10-13 10:48:19 3813

原创 网络硬件的一些认识

假期时间看了一本介绍网络硬件的书《图解网络硬件》,作者日本的,文笔比较朴实,干货不少,网络硬件设备的发展历史介绍的比较详细。之前对于网络设备的有些零散的认识,比如mac地址学习,vlan,路由协议之类,没有系统的学习过。最近搞docker相关的sdn研究,刚好凑这个机会对完了过做了一次系统的学习,看这本书的收获还是很大的。书中具体的知识不再详细介绍,在此谨把个人认为重要的知识点总结一下,有兴趣的同

2016-10-10 11:50:17 461

原创 RDBMS实现技术的难点--专业的DBA需要了解哪些

系统软件中,RDBMS技术实现和运用掌握,可以说是最为困难的一个,甚至不是之一。      操作系统内核,涉及底层技术和算法,不同操作系统的发展殊途同归,在关键的数据结构和算法上的选择基本是一致,不那么容易让人产生混淆。linux的迅速发展中就借鉴了很多Unix/Solaris的技术。      不同的关系数据库,对于关键技术的实现由很大不同,提高了使用者的技术门槛,其使用方法和试用场景也

2016-10-02 21:25:41 590

原创 关于快照隔离和幻影读的一些深入思考

大家知道mysql的隔离级别有四种:read uncommitted,read committed,read repeatable,serializable      对于前面三种的区别,比较容易理解,不在赘述。关键是第三种个第四种的区别,不太好理解。      这里举个前段时间微信公众号上看到的一个例子大致是这么说的:table credit上面记录了每个用户的消费记录,

2016-10-01 14:05:58 2397

原创 谷歌技术栈(old)和业界的对比

假期第一天下大雨没出门,顺便写下技术博客。       上面的是google的技术栈,可以自行google搜索。已经比较老了,比如F1、TensorFlow还没有加进来。       自底向上的分析吧分布式锁和统一配置管理开源社区的从最初的zk到etcd,已经有很多选择,有的分布式系统中还会自己造个轮子(例如ceph的ceph monitor)。zk有自己的zab协议,

2016-10-01 13:07:14 1895

原创 关于redis的一些总结

redis是一个全内存的数据结构服务器:支持多种常用数据结构,例如list set hash map 多种内存索引(hash索引,skip list,rtree索引、组合索引、二级索引等)可以灵活的配置数据的存储格式(是否进行压缩)支持多种计算功能,如简单的集合的交并补,排序等redis对于持久化的支持有两种,一种AOF(append only file),一种RDB。AOF是

2016-09-30 21:45:56 373

原创 关系数据库实现的一些基本技术

ACID的一些关键技术redolog undologMVCC基于乐观锁的并发控制2PC基于悲观锁的并发控制cache buffer double write索引技术B+树索引事务索引聚簇索引多维索引LSM-tree索引COLA-B+tree索引fractal tree索引位图索引BloomFitlter索引查询优化rule basedcost based

2016-09-27 13:13:17 500

原创 容器技术当前的不足和发展方向

内核在有些关键的资源隔离还不支持,或者需要比较高的版本,例如slab 内存,文件描述符,inode等等,容器环境独立的root,这都有待于内核和操作系统进一步发展;国内尚未听说有人尝试用coreOS之类;k8s之类编排和调度引擎,暂时缺少优先级的概念,例如在业务高峰期kill掉一些低优先级的容器,释放资源来扩展高优先级任务,Borg/omega 号称支持这种特性吧。容器网络尚未形成一种事实上的标准

2016-09-26 17:22:53 1813

原创 容器网络之方法论和技术选型

容器技术发展很快,网络逐渐成为瓶颈,遇到的需求和问题:跨主机的容器互联:很多中间件(jboss/redis/kafka)部署,要求跨主机实现分布式和高可用容器与外部互联:容器内访问外部的物理数据库;外部服务调用容器中的服务,需要非NAT的IP直通(例如服务治理平台,容器以私有IP注册服务,外部系统以此IP访问容器服务),要求扁平空间,不要多个网络平面。容器集群不同应用之间的网络

2016-09-26 16:29:53 1937

原创 Web架构/技术的一些演进

最近跟一个前同事聊了下前东家的web技术的发展和最新的一些web开发技术。前东家的一些发展前台已经在瘦身了,目前倾向于采用nginx+lua+redis的方式,不再使用apache+jbosscassandra之类还没都用起来,有些需要持久化存储的key-value数据暂时就是redis+db的方式使用中台,子系统之间采用ESB,系统内部采用mq(主要是kafka);中

2016-09-23 11:49:57 463

原创 skip-list vs red-black tree

红黑树是常见的数据结构,主要用来建内存索引,内核的VFS里面有很多。skip-list的数据结构,大学里面接触的少,近些年比较流行;skip-list的优点:1.适合高并发的场景,red-black tree在经常插入和删除时候可能会涉及整个树的旋转,这就需要对多个节点枷锁;导致并发效果不过;2.skip-list的插入和删除相对简单,插入和删除时候只涉及前驱和后继,不会影响整体;

2016-09-03 12:34:24 1507

原创 openstack vs docker

openstack在硬件资源的管理方面已经比较成熟了;docker则在应用程序的部署和编排方面具有较大的优势;open tack的heat,要部署一套app,要执行yum install,有点ugly;而docker启动一个一个容器就是一个应用,这个应用的启动参数,可以用环境便令、命令行参数、配置文件等多种方式传给应用;docker的app catalog非常简单和优雅,opens

2016-09-02 23:19:03 705

原创 raft算法的核心思想

raft算法跟paxos,zab(zookeeper atomic broadcast)算法类似,设计一个一致性算法,在一个分布式系统中实现一个分布式的、高可用的、一致性的存储系统。raft的特点是设计简单,易于程序员的理解和实现,并不是那么抽象。raft算法的核心思想和关键技术点:1.保证系统中只有一个leader,每次leader选举都是必须具有最新的termID(或者epoch)

2016-05-13 12:20:49 951

原创 大型电商网站两年之技术总结

转眼已经是在互联网第三个年头了。跟公司一起成长,从经历过2次双十一大促,还有数不清楚的小促销。跟公司一起遇到了不少坑,这里站在宏观的角度为公司总结下经验和教训。web架构,两个问题比较突出,一个是经常出问题的就是数据库开发和运维不规范。有次大促数据库挂死,时候分析原因是备份脚本有问题,把某个表的索引删除了。因为数据库出问题是多次,这方面web应用的dba肯定是有问题的。基础支撑

2016-04-10 16:45:24 729

原创 web项目上云的思考

对于传统的web项目来说,上云(公有云)部署,在技术成熟度是比较高的;目前公有云IaaS类业务可以支持数据库、分布式缓存、负载均衡等web相关的挂件组件。这里主要讨论下,应用上云之后,技术上的优劣势和管理上的问题。本文主要分析以本人在国内某大型电商网站的私有云/公有云建设的经验为背景。

2016-04-07 11:14:22 1425

原创 Data Structure and Algorithm

index数据结构内存池管理NLPdeep learning

2016-03-24 17:59:28 967

原创 系统设计的角度看GlusterFS&&ceph

GlusterFS和ceph是开源领域很火的两个分布式文件系统。技术文章也有不少。这里只谈下个人的一些看法,大家讨论比较多就不提了。GlusterFS的几大特点:1.所见即所得,一个文件究竟长什么样,完全取决于client对于posix文件api的解释。副本怎么写,文件从哪里读,等等,都是client决策的。2.keep is simple and stupid。每个posix的api

2016-03-23 15:07:46 4875

原创 redis集群实现分布式锁

好久没写博客了,突然想起来以前看老外博客上redis做分布式锁的想法。实现一个DLM(distributed lock manager)主要需要考虑一下几个问题:1. lock server本身需要是高可用的,如果是多个节点,需要保证2n+1个节点只要n+1个节点可用则服务可用2.分布式系统里,申请lock的client可能会宕机,因此每个锁,必须有一个expire时间,系统可以回收

2016-03-23 12:56:15 5444

原创 近期分布式存储技术实践的总结和思考

1.从硬件发展趋势看,server san,pcie ssd加速将带来革命性的

2014-09-18 15:59:57 988

原创 impala

Impala是什么       Impala是cloudera发布的基于hadoop平台的sql查询引擎,本质上一个MPP(massive parallel process)查询引擎。目的提供类似传统商用数据库的交互式查询功能 解决hive只支持批量处理不支持实时查询的问题 能够处理超大规模的数据集Architecture         Impala的前端

2014-01-10 17:35:08 1486

原创 Lio target

Linux-IO Target是什么Linux上对于scsitarget的是一个实现,主要包括了target_core.ko(从2.6.38的内核版本开始)和其他几个可选的驱动模块。Lio的目的         提供scsi的target服务,scsi的initiator跟target之间可以在不同的物理主机之间,通过多种不同的协议ip,FC,FCoE,Infiniband;scsi的

2014-01-10 17:13:40 3517

原创 ceph的CRUSH算法

Ceph中关于副本位置的选择,采用的算法是CRUSH。核心思想是根据(object的ID,deviceID or number,deviceweight,replica number,伪随机参数)计算出副本的位置。Ceph采用的CRUSH算法的实现,跟openstack swift等采用一致性一致性hash有着明显的区别。先说相同之处,目的都是类似,都是为了保证副本分布的均匀,设备空间利用率的

2013-12-09 15:01:08 1570 1

ReiserFS技术分析

分析了reiserfs小文件存储的特点,reiserfs设计特点不同于传统的ext或者xfs等文件系统

2014-09-18

ceph crush算法分析

分析了ceph对象存储的副本分布算法crush

2014-09-18

文件系统中的write barrier分析

分析了linux os架构下的block io路径,多层cache和schedule机制,重点分析了文件系统write barrier的原理

2014-09-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除