C++雾中风景12:聊聊C++中的Mutex,以及拯救生产力的Boost

笔者近期在工作之中编程实现一个Cache结构的封装,需要使用到C++之中的 互斥量Mutex ,于是花了一些时间进行了调研。( 结果对C++标准库很是绝望.... )最终还是通过利用了Boost库的 shared_mutex 解决了问题。借这个机会来聊聊在C++之中的多线程编程的一些 “坑” 。 1 ... »

大数据小视角5:探究SSD写放大的成因与解决思路

笔者目前开发运维的存储系统的服务器都跑在SSD之上,目前单机服务器最大的SSD容量有4T之多。( 公司好有钱,以前在实验室都只有机械硬盘用的~~ )但SSD本身的特性与机械硬盘差距较大,虽然说在性能上有诸多优势,但是如果使用的方式方法不对,反而会事倍功半。所以笔者花时间调研了一下固态硬盘的结构与特性 ... »

C++雾中风景番外篇:理解C++的复杂声明与声明解析

在学习C系列语言的过程之中,理解C/C++的复杂声明一直是初学者很困扰的问题。笔者初学之时也深受困扰,对很多规则死记硬背。后续在阅读 《C专家编程》 之后,尝试在编译器的角度来理解C/C++的声明解析,并且编写代码将这部分逻辑串联起来,之后再看到许多看似复杂的声明,也能够很好的理解和消化了。 1.复 ... »

Python读取大文件的"坑“与内存占用检测

python读写文件的api都很简单,一不留神就容易踩” 坑 “。笔者记录一次踩坑历程,并且给了一些总结,希望到大家在使用python的过程之中,能够避免一些可能产生隐患的代码。 1.read()与readlines(): 随手搜索python读写文件的教程,很经常看到 read()与readlin ... »

C++雾中风景10:聊聊左值,纯右值与将亡值

C++11的版本在类型系统上下了很大的功夫,添加了诸如 auto,decltype,move 等新的关键词来简化代码的编写与降低阅读代码的难度。为了更好的理解这些新的语义,笔者确定通过几篇文章来简单窥探一下C++类型系统的冰山一角,如果加深了对C++类型系统的理解,想必大家也能够更好的应用由C++1 ... »

大数据小视角3:CarbonData,来自华为的中国力量

连续两篇文章都聊了不同的存储格式,这篇我们继续深入来看看在存储格式的演变之上有什么新的 "黑科技" 。华为公司在2016年开源了类parquet的列存格式: CarbonData ,并且贡献给了Apache社区。CarbonData仅仅用了不到一年的时间就成功毕业,成为了Apache社区的顶级项目, ... »

大数据小视角2:ORCFile与Parquet,开源圈背后的生意

上一篇文章聊了聊基于PAX的混合存储结构的RCFile,其实这里笔者还了解一些八卦,RCfile的主力团队都是来自中科院的童鞋在Facebook完成的,算是一个由华人主导的编码项目。但是RCfile仍然存在一些缺陷,后续被 HortonWorks 盯上之后上马了 ORCFile 格式,而老对头 Cl ... »

C++雾中风景9:emplace_back与可变长模板

C++11的版本在vector容器添加了 emplace_back方法 ,相对于原先的push_back方法能够在一定程度上提升vector容器的表现性能。所以我们从STL源码角度来切入,看看这两种方法有什么样的区别,新引进的方法又有什么可学习参考之处。 1.emplace_back的用法 empl ... »

大数据小视角1:从行存储到RCFile

前段时间一直在忙碌写毕设与项目的事情,很久没有写一些学习心得与工作记录了,开了一个新的坑,希望能继续坚持写作与记录分布式存储相关的知识。为什么叫小视角呢?因为属于随想型的内容,可能一个由小的视角来审视海量数据的存储与计算技术,把知识点分为两到三章来梳理。 管中窥豹,可见一斑,希望能利用这个过程提高自 ... »

C++雾中风景8:Lambda表达式

上一篇C++的博客是Long Long ago了,前文讲到在看 Lambda表达式 的内容。笔者首次接触Lambda表达式应该是学习Python语言的时候,当时也不太明白这种表达方式的精髓,后续接触了Scala与Java8的链式调用与Lambda结合的方式,深陷无法自拔。所以借上一篇闭包的内容。我们 ... »

Linux下双网卡Firewalld的配置流程

实验室拟态存储的项目需要通过LVS NAT模式通过LVS服务器来区隔内外网的服务,所以安全防护的重心则落在了LVS服务器之上。笔者最终选择 通过firewalld放行端口 的方式来实现需求,由于firewall与传统Linux使用的iptable工具有不小的区别,接下来通过博客来记录一下firewa ... »

LVS-NAT模式的配置详解

由于实验室拟态存储的项目需要通过NAT模式来映射NFS服务器已实现负载均衡的目的,通过调研了多种负载均衡机制,笔者最终选择了 LVS的NAT模式 来实现需求,接下来通过博客来记录一下LVS NAT模式的配置流程。 1.LVS服务的简介: LVS 是 Linux Virtual Server 的简写, ... »

流处理与消息队列------《Designing Data-Intensive Applications》读书笔记16

上一篇聊了聊批处理的缺点,对于无界数据来说, 流处理 会是更好的选择,“流”指的是随着时间的推移逐步增加的数据。消息队列可以将这些流组织起来,快速的在应用程序中给予反馈。但是消息队列与传统的数据库之间又存在着“剪不断,理还乱”的“纠葛”,最后我们将探讨通过消息队列之中与时序有关的一些问题。 文件是批 ... »

流式计算与计算抽象化------《Designing Data-Intensive Applications》读书笔记15

上篇的内容,我们探讨了分布式计算中的 MapReduce与批处理 。所以本篇我们将继续探索分布式计算优化的相关细节,并且分析MapReduce与批处理的局限性,看看 流式计算 是否能给我们在分布式计算层面提供一个更好的解决方案。 1.MapReduce的局限 MapReduce作业是独立于其他作业, ... »

线性一致性与全序广播------《Designing Data-Intensive Applications》读书笔记12

上一篇聊了聊构建分布式系统所面临的困难,这篇将着重讨论构建容错分布式系统的算法与协议。构建容错系统的最佳方法是使用通用抽象,允许应用程序忽略分布式系统中的一些问题。本篇我们先聊一聊线性一致性,以及与线性一致性有关的技术,后续需要了解的分布式协调服务,如:ZooKeeper等,都是基于分布式系统的线性 ... »

分布式系统的烦恼------《Designing Data-Intensive Applications》读书笔记11

使用分布式系统与在单机系统中处理问题有很大的区别,分布式系统带来了更大的处理能力和存储容量之后,也带来了很多新的 "烦恼" 。在这一篇之中,我们将看看分布式系统带给我们新的挑战。 1.故障 当我们在使用单机系统时,它通常以一种相当可预测的方式工作:要么它正常工作,要么不工作。 而当我们在使用分布式系 ... »

事务与隔离级别------《Designing Data-Intensive Applications》读书笔记10

和数据库打交道的程序员绕不开的话题就是: 事务 ,作为一个简化访问数据库的应用程序的编程模型。通过使用事务,应用程序可以忽略某些潜在的错误场景和并发问题,由数据库负责处理它们。而并非每个应用程序都需要事务,有时削弱事务性担保或完全放弃事务,可以获得更高的性能或更高的可用性。怎么样更好的理解数据库中的 ... »