个人历史文档沉淀, PingCAP 数据库训练营 (TinyKV) 的代码记录, 主要围绕 Raft 的实现和优化. 这个方案在学习营里获得二等奖, 对应三千元奖金. 项目地址: https://github.com/czt1999/tinykv-czt1999 项目结构
大数据技术的两个核心问题是存储和计算, 不存在通用的最优方案, 需根据实际场景选择合适的技术. 磁盘操作和网络传输是主要的性能瓶颈, 优化的切入点在于高效利用内存、尽可能本地计算. 数据的价值在于准确且全面地反映现实业务情况, 静止的业务数据是没有意义的, 需经由动态的变化揭示事物的发展规律. "解
数据抽象 Spark 的模型基石是 RDD, 一种分布式计算的数据抽象, 特性如下: 不可变 : RDD 的内容和分区结构在创建后不可修改, 只能通过转换 (map / filter) 生成新的 RDD, 避免多节点并发修改的冲突 可分区 : 每个分区是最小计算单元, 分布在不同节点, 默认为 HD
Kubernetes 的目的是实现分布式大规模集群的自动化运维, 底层依赖于容器技术, 优势在于, (1) 根据面向对象的设计思想对常见的运维操作进行了高度抽象, (2) 使用声明式 API 简化操作. 总体架构: (图片来源:
Redis 是一种键值型 (key-value) 内存数据库, 广泛用于缓存. 数据结构 string / list / hash / set / zset zset 跳表 多级索引: 令 P 表示索引的密集程度, 假设为 .5, 那么新增一条记录时, 令: 建立一级索引的概率为 P (=.5) 建
MySQL 属于传统的关系型 (结构化) 数据库, OLTP. 关系数据库三范式 [ 1NF ] 列不可再分 (原子性) [ 2NF ] 属性依赖于主键 [ 3NF ] 属性直接依赖于主键 (例子: 学生为主键 - 学院为属性) 一个 SQL 语句的执行顺序
架构 Read 初始化文件系统对象, 建立与元数据节点 NameNode 的通信 向 NameNode 请求目标文件的元信息 (存储格式, 存储位置, 块路径..)
官方资料: https://github.com/golang/go/wiki https://go.dev/doc/faq https://go.dev/doc/effective_go CSP CSP 全称是通信顺序进程 (Communicating Sequential Processes),
JMM Java 内存模型 (JMM) 是在并发的视角下, 对程序执行的一种规范, 规定了一个线程的写操作何时对另一个线程可见, 规范就是一种抽象, 目的是提供对跨平台的良好支持. JMM 规定, 共享变量都存储在主内存中, 每个线程有自己的工作内存, 用以保存局部变量和主内存的副本拷贝, 线程对共
CPU 执行的指令序列称为控制流. 程序在执行过程中不可避免会受到某些外部事件的影响, 比如计时器到期, 网络包抵达...这些事件会导致控制流的意外变化. 这种意外变化称作“异常控制流”. 异常 异常是对处理器状态变化 (检测到某个事件) 的反应, 由硬件和操作系统共同实现. 异常的处理流程:
虚拟内存 (VM) 是一个 kernel 程序, 提供了存储的顶层抽象, 将主内存视作硬盘的缓存进行管理. 好处: 实现了硬件异常处理、硬件地址转换、主内存和硬盘之间的优雅交互. 为每个进程 (P) 提供一个统一、 私有的地址空间 (虚拟地址空间), 保护每个 P 的内存操作互不干扰. 物理/虚拟地
从 CPU 的角度看, 内存被抽象成一条字节阵列, 实际上内存系统是具有层次结构的, 不同层次的设备具有不同的容量, 速度和成本. 这种层次结构之所以有效, 是因为编写良好的程序在某一时间段内, 对存储在高层次设备的数据的访问频率总是相对较高 (局部性). 当然, 为了更有效地利用这个特性, 还需要
链接是指将多个代码/数据片段合并成单个可执行文件的过程, 可以发生在编译期/装载期/运行期, 大部分情况下由专门的链接器来完成. 链接器 (ld) 对于程序开发是必不可少的, 因为它允许分别编译 (separate compilation), 代码修改后只需要重新编译变更过的部分, 再重新链接, 无
OSI (开放式系统互联) 模型的 7 个层次: 从下至上的网络层次, 实际上是物理空间 (具象) 到虚拟空间 (抽象) 的逐级过渡, 使得现实世界的物理因素对于互联网应用而言几乎完全透明. 从 TCP/IP 视角看各层协议: 常见的应用与对应协议: