实时 OLAP:列存与预聚合的两条路线
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
共45篇文章
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
DI 和 IOC 的关系 DI(依赖注入)和 IOC(控制反转)相关,但含义不同。 控制反转(IOC)是一种设计原则:组件不在自身代码中解析和管理依赖,而由外部容器或框架负责这些工作。组件因此可以替换依赖实现、复用,并在测试中注入替代依赖。 依赖注入(DI)是实现 IOC…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制 Redis…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型 Redis(上):缓存用法与单线程模型的限制(本篇) 缓存整体变慢的那次排查 (Tair…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界 Web 容器与 Netty:线程模型之下的 IO 模型(本篇) 容器怎么处理连接 云盘服务端内嵌 Jetty 9 提供 HTTP…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁 接入层:Nginx 反向代理与 OpenResty 的边界(本篇) 把文件传输从业务进程里挪出去 2016 年做 IM 文件转发时,Java 流对流方案被否决了。方案二的链路是 ,Java 服务从 MSS…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描 声明式事务之下:InnoDB 的 MVCC 与锁(本篇) 回滚后读到中间值的原因 2016 年写一个涉及状态流转的接口时,一个事务把某条记录的状态从 A 改成 B,随后因异常回滚。紧接着我用数据库客户端查询,看到状态还是 B…
背景:IM 文件接入后,下载链路也要做权限控制 云盘合入大象后,群聊里的图片、附件和其他资源由云盘存储。底层文件放在内部基于 Swift…
系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch:一个接口聚合一堆下游 用 Kafka…
系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch…
系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch…
系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch…
系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch…
系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch…
系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch…
系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch…
系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch…
系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写(本篇) 项目开始前需要确认的并发边界 第…
系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上(本篇) 从 Node.js 的事务写法开始准备 做 Java 版云盘前,我已有 Node.js、C# 等后端开发经验。Node…
基于 electron 开发客户端时,需要通过 nodejs addon 扩展 electron 相关功能。本文记录 libuv 异步 addon 的线程与数据传递方式。 asynchronous addons C++ 中的耗时任务应使用异步 addon。同步调用会阻塞 JavaScript…
系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池参数、队列与快慢接口隔离(本篇) 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 上一篇讨论了 Node.js 单事件循环与 Java 请求线程池的差异。此前写过 Node.js、C…
2015 年 9 月,云盘服务端从 Node.js 整体转向 Java,背景在之前的云盘服务端从nodejs 专项 java 相关复盘里写过。此前我做过 Node.js 和 C# 的后端开发,知道 Java…
系列目录 MySQL 索引与慢查询:B+ 树如何减少扫描(本篇) 文件列表越来越慢 云盘 Java 版上线后,文件列表接口随单用户文件数增长越来越慢。页面打开要等好几秒,监控里这条接口的 RT 明显高于其他接口。慢查询日志定位到一条 SQL…
说明 本文总结云盘服务端从 Node.js 转向 Java 的过程。我平时也使用 nodejs、go、python、C#、java 开发,本文只讨论当时的项目约束和工具链。 云盘 Web 前后端和服务端开发在 5 月由我接手。此前基础终端负责各端,云计算组负责服务化;云计算组已使用 Python Tornado…
云盘服务端 Java 化后,权限校验通过 HTTP header 中的认证信息完成。请求 body 包含业务数据时,签名计算还需要读取 body。最初实现了一个 ,并在 中从 读取 body 后计算签名;但 Spring MVC 向 handler 参数注入 body 前,请求流已被读取,导致下列 function…
全栈开发需要掌握的深度取决于具体工作。使用 Node.js 时,为了理解其运行方式,我阅读了部分源码并尝试直接使用 V8 执行 JavaScript。 当时网上资料大多集中于开发 addons,而且 V8 经历过一次较大的 API 升级,部分旧资料已经不适用。本文记录基于当时 V8 API 的实验过程。 Node.js…