MySQL: 一条SQL语句是如何执行的?

1 MySQL 基本架构 MySQL基本架构示意图 2 日志系统 与查询流程不一样的是,更新流程还涉及两个重要的日志模块,它们正是我们要讨论 的主角:redo log(重做日志)和 binlog(归档日志)。 如果接触 MySQL,那这两个词肯定是绕不过的,我后面的内容里也会不断地和你强调。 不过话说回来,redo log 和 binlog 在设计上有很多有意思的地方,这些设计思路也可以用到你自己的程序里。 2.1 重要的日志模块:redo log……

阅读全文

什么是鸭子类型(duck typing)

1 duck type

“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。

duck-type

比如在 python 中,有很多 file-like 的东西,比如 StringIO, GzipFile, socket; 它们有很多相同的方法,我们把它们当作文件使用。

……

阅读全文

浅谈微服务架构、大数据技术

1 微服务架构现状及原理 目前 SpringCloud、Dubbo等微服务主流开发框架盛行, Spring Cloud 也被开发者认为是最好的开发框架;越来越多的单体应用架构向微服务化转变。微服务化与容器技术相辅相成,容器技术的成熟为微服务提供了得天独厚的客观条件。轻量化的容器是微服务的最佳运行环境,微服务应用在容器环境下等到了运维效率的提升。 其中: 微服务化主要是对单体应用功能解耦。 1.1 微服务架构优点 通过分解单体应用为多个微服务的方式降低了单体应用的复杂度。每个服务通过rpc或者消息驱动的api定义清楚边界。微服务模式为单体式……

阅读全文

五种 IO 模型

1 Preface 同步 (synchronous IO) 和异步 (asynchronous) IO,阻塞 (blocking) IO和非阻塞(non-blocking) IO分别是什么,到底有什么区别? 这个问题不同的人给出的答案可能不同。为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。 我们这里讨论的背景是Linux环境下的network IO, 本文参考 Richard Stevens 2003 年的传世之作 1 ,如果英文够好的话,推荐直接阅读。Stevens的文风是有名的深入浅出,所以不用担心看不懂。 2 五种 I/O 模型 blocking I/O nonblocking I/O I/O multiplexing (select and poll) signal driven I/O (SIGIO) asynchronous I/O (the POSIX aio_functions) 再说一下IO发生时涉及的对象和步骤。 对于一个net……

阅读全文

系统调用之 restart_syscall

在我们使用strace -p pid 的时候,经常会遇到如下情景:
restart_syscall

restart_syscall 究竟是个什么系统调用呢?什么时候会用到该系统调用呢?

……

阅读全文

Red Black Tree (01)

1 BST BST (Binary Search Tree) 二叉搜索树, 在key 恰好有序的时候,会退化成链表。 Conclusion BST 的查询复杂度取决于树的高度, 树的高度即最大比较次数。 一棵具有 N 个 node 的 BST 树高(height)取值范围为:logN ≤ height ≤ N 因此,BST越平衡,在树中查找的时间就越短,连带地插入,删除也会变得效率更高。 红黑树的特征 红黑树(RBT)是节点涂了「颜色」的二分搜索树(BST),借助颜色控制,能够保证在 RBT 中,最长路径(path)不会超过最短路径的2倍(若最短的路径是5,最长的路径至多只能是10),如此,RBT便能够近似地视为平衡,如下图: 上图:……

阅读全文

Multithreading-with-ZeroMQ

本文翻译自ZeroMQ文档的一小部分内容, 该段落提供了解决多线程问题的一个绝佳方式。 这是前辈30多年的并发编程经验之谈! 点击阅读原文:Multithreading-with-ZeroMQ Preface ZeroMQ(又称为ØMQ,0MQ,或zmq)看起来像一个可嵌入的网络编程库, 但用起来更像是一个并发框架。 它为你提供的套接字(sockets), 能以进程间, 进程内, TCP 和多播等多种方式传输原子消息。 你可以用fan-out, pub-sub, 任务分发, 和 req-rep 等多种模式, 给套接字建立多对多的连接。 它速度之快足以构建集群产品。 它的异步I……

阅读全文

Zookeeper+Kafka集群搭建方案

Preface Zookeeper是一个高性能分布式应用协调服务 Naming Service 配置管理 Leader Election 服务发现 同步 Group Service Barrier 分布式队列(其实zookeeper并不适合作为分布式队列,性能不高只不过在特定场合可以) 两阶段提交 Zookeeper工作方式 Zookeeper集群包含一个1个Leader,多个Follower 所有的Follower都可提供读服务 所有的写操作都会被forward到Leader Client与Server通过NIO通信 全局串行化所有的写操作 保证同一客户端的指令被FIFO执行 保证消息通知的FIFO 与Kafka读写操作不一……

阅读全文

eventfd 入门

1 eventfd 是什么 eventfd 是linux内核一个计数器,主要用于进程间或者线程间,高效的事件通知。 它也是一个系统调用,在内核空间进行计数,用于事件通知 (since linux 2.6.22)。 eventfd 也是一个fd,同样可以使用read/write进行读写操作,本质上是eventfd实现了read/write接口(里氏替换)。 更详细的可以查看 man eventfd 1 2 3 #include <sys/eventfd.h> int eventfd(unsigned int initval, int flags); eventfd() 创建一个 eventfd 对象,可以由用户空间应用程序实现事件等待/通知机制, 或由内核发送事件通知, 到用户空间的应用程序。 该对象包含了一个无符号64位整型计数器,计数器由内核维护。 此计数器,……

阅读全文

kafka安装

Install zookeeper cp conf/zoo-sample.cfg conf/zoo.cfg vi conf/zoo.cfg 主要修改配置文件中,数据目录的位置。 启动zookeeper服务 bin/zkServer.sh start kafka 2.12 修改配置文件: config/zookeeper.properties 修改数据目录: dataDir=/home/hadoop/zk #因为zookeeper变更为zk,所以需要在这里修改一下 启动zookeeper bin/zookeeper-server-start.sh config/zk.properties 启动kafka服务器(broker) 启动kafka服务器(broker)……

阅读全文

最近文章

分类

友情链接

标签

其它