Rust内存管理
相比于传统c++当中的手动管理内存,rust采用了所有权 + RAII的机制,对于一些复杂的情况,rust还有生命周期等约束,从而保证在编译期能够解决大多数的内存安全问题。 ...
相比于传统c++当中的手动管理内存,rust采用了所有权 + RAII的机制,对于一些复杂的情况,rust还有生命周期等约束,从而保证在编译期能够解决大多数的内存安全问题。 ...
More Than Capacity: Performance-oriented Evolution of Pangu in Alibaba Introduction 本文主要讲述了盘古分布式存储十年来的一个演变历程,主要分为了三个阶段,分别是1.0,2.0的阶段一和2.0的阶段二。 在盘古1.0,此时的盘古主要是提供面向卷的存储服务(volume-oriented storage service provision),在这个阶段在硬件上使用的是传统的hdd,操作系统上使用的是内核空间的文件系统,最终主要的性能瓶颈时HDD和网络带宽。这个阶段有点像google的GFS 在盘古2.0的第一阶段,主要工作就是通过拥抱新硬件来解决1.0时期的性能瓶颈问题,通过引入SSD和RDMA技术,以提供高性能低延迟的存储服务。在这个阶段, 存储架构上采用通用的追加型持久层,并且将chunk的设计为独立类型。 在os层面将原本的内核空间文件系统转换为用户空间(user-space storage operatiing system USSOS),使用run-to-completion线程模型 提供SLA保证 在盘古2.0的第二阶段,将业务模式更新为性能导向,并且尝试打破网络,内存,CPU上的性能瓶颈,采用的解决方式分别为: 减少流量放大率 使用RDCA(remote direct cache access) 减少序列化和反序列化过程的计算负担,将部分cpu的计算职能移动到FPGA上,引入 CPU 等待指令来同步超线程 Background Overview of Pangu 作为大规模的分布式存储系统,主要由三部分组成:Pangu Core,Pangu Service,Pangu Monitoring,而核心就是盘古Core,架构图如下,乍眼一看和GFS差不多: ...
由于Miniob的整体架构并没有做出很大的变化,并且目前知乎上也已经有其他人写的架构分析文章,我在这里就不过多介绍架构相关的了,只说一下我自己的一些实现和遇到的bug以及对应的修复方式。 ...
SPFresh: Incremental In-Place Update for Billion-Scale Vector Search Introduction 本文聚焦于两个方面,一个是采用in-place(即原地更新)的方式更新索引,而另一个则是如何维护高质量的索引。对于之前的ANNS算法,无论是基于图的还是基于簇(cluster)的,通常采用的是重建索引的方式,即积累一段时间的新向量,到达一定程度后重新构建整个索引。但这样带来的问题就是会消耗大量的资源,并且构建索引的过程也会给查询带来延迟。 ...
Manu: A Cloud Native Vector Database Management System Introduction Manu或者其前身Milvus,定位目标是云原生的向量数据库,需要提供基础的向量存储和检索服务,同时,相比传统的云原生DBMS,主要有以下的特点: ...
分布式系统模型 拜占庭将军问题 拜占庭将军主要用于解决共识问题,三个将军决定攻打拜占庭,只有三个人一同进行攻打才能够成功,否则则会失败,因此需要三者之间通过信使来进行通信,以求达成共识,整个系统是处于不信任状态的,即将军可能会是叛徒,向其他的将军传递错误的信息,信使也是不可靠的,可能会被俘虏或者数据为假。 ...
物理存储系统 这一部分重点并不多,主要是各种存储类型上的差异,比较了几种物理存储上的差异,以及SSD,HDD 之间的差异,最后又介绍了RAID的思想以及RAID分层,总结几个问题 ...
日志与恢复 数据库当中存在哪些故障? 简单来说可以分为三种故障: 事务故障 系统故障 存储介质故障 而事务故障也可分为两种: 逻辑错误 (Logical Errors):由于一些内部约束,如数据一致性约束,导致事务无法正常完成 内部错误 (Internal State Errors):由于数据库内部调度、并发控制,如死锁,导致事务无法正常提交 系统故障可以分为两种: ...
事务与并发控制 简单介绍一下事务? 事务作为数据库执行过程中的一个逻辑单位,可以表明一组操作,这一组操作要么一起成功,要么全部回滚,并且事务之间一定程度上相互隔离,互不影响。事务具有事务的四大特性 ACID,分别为原子性 一致性 隔离性与持久性 ...
数据库基础结构 数据库结构 为什么需要DBMS? 一个数据库在最基础的层次上需要完成两件事情:当你把数据交给数据库时,它应当把数据存储起来;而后当你向数据库要数据时,它应当把数据返回给你。 ...
内存虚拟化 简单谈一谈对内存虚拟化的理解? 计算机当中的内存条成为物理内存,虚拟化内存即为对物理内存进行抽象,抽象成为地址空间的一个概念。在其中划分了程序代码,栈、堆三个空间,栈用于保存函数的调用信息,分配空间给局部变量,用于传递参数的函数返回值,堆用于管理动态分配的内存。 ...
如何理解CPU虚拟化? CPU虚拟化,用一句话简单的概括就是,通过CPU虚拟化的手段,可以让多个程序在同一时间段内在一台机器上运行,共享CPU,同时对此毫无感知,每个程序认为只有自己在使用CPU。 ...