文章有点长,耐心看完应该可以懂实际原理到底是啥子. 这是一个KV数据库的C#实现,目前用.NET 6.0实现的,目前算是属于雏形,骨架都已经完备,毕竟刚完工不到一星期. 当然,这个其实也算是NoSQL的雏形,有助于深入了解相关数据库的内部原理概念,也有助于实际入门. 适合对数据库原理以及实现感兴趣的朋友们. 整体代码,大概1500行,核心代码大概500行. 为啥要实现一个数据库 大概2018年的时候,就萌生了想自己研发一个数据库的想法了,虽然,造轮子可能不如现有各种产品的强大,但是,能造者寥寥无…
目录 设计思路 何为 LSM-Treee 参考资料 整体结构 内存表 WAL SSTable 的结构 SSTable 元素和索引的结构 SSTable Tree 内存中的 SSTable 数据查找过程 实现过程 Key/Value 的表示 内存表的实现 二叉排序树结构定义 插入操作 查找 删除 遍历算法 WAL WAL 文件恢复过程 SSTable 与 SSTable Tree SSTable 结构 SSTable 文件结构 SSTable Tree 结构和管理 SSTable 文件 插入 SS…
首先感谢虹软,是你们提供这么好的SDK支撑了我们的想象力! 这是一个用javav编写的可视化应用,用户通过自己的脸和计算机进行交互,计算机则通过萌萌女孩的语音和用户对话.核心程序就是利用ArcFace2.0识别性别.年龄,但是为了获得正面脸,会根据ArcFace2.0的人脸3D角度.用语音提醒用户,这是一个的互动环节.最后,程序会幽默的.萌萌的告诉用户他的性别.年龄. 获取SDK 请戳这里 完整的项目源码.可执行程序,放在百度网盘:链接: https://pan.baidu.com/s/1eHF…
以代码的思想去详细讲解yolov3算法的实现原理和训练过程,并教使用visdrone2019数据集和自己制作数据集两种方式去训练自己的pytorch搭建的yolov3模型,吐血整理万字长文,纯属干货 ! 实现思路 第一步:Pytorch搭建yolo3目标检测平台 模型yolov3和预训练权重下载 yolo3算法原理实现思路 一.预测部分 1.yolo3的网络模型架构和实现 2.主干特征网络darknet53介绍和结果(获取3个初始特征层) 3.从初始特征获取预测结果(最终的3个有效的特征层) 4…
LSM Tree(Log Structured Merge Trees)数据组织方式被应用于多种数据库,如LevelDB.HBase.Cassandra等,下面我们从为什么使用LSM tree.LSM tree的实现思路两方面介绍这种存储组织结构,完成对LSM tree的初步了解. 存储背景回顾 LSM tree相较B+树或其他索引存储实现方式,提供了更好的写性能.究其原因,我们先回顾磁盘相关的一点背景知识. 顺序操作磁盘的性能,较随机读写磁盘的性能高很多,我们实现数据库时,也是围绕磁盘的这点特…
引言 众所周知传统磁盘I/O是比较耗性能的,优化系统性能往往需要和磁盘I/O打交道,而磁盘I/O产生的时延主要由下面3个因素决定: 寻道时间(将磁盘臂移动到适当的柱面上所需要的时间,寻道时移动到相邻柱面移动所需时间1ms,而随机移动所需时间位5~10ms) 旋转时间(等待适当的扇区旋转到磁头下所需要的时间) 实际数据传输时间(低端硬盘的传输速率为5MB/ms,而高速硬盘的速率是10MB/ms) 近20年平均寻道时间改进了7倍,传输速率改进了1300倍,而容量的改进则高达50000倍,这一格局主要…
The Sorted String Table (SSTable) is one of the most popular outputs for storing, processing, and exchanging datasets. An SSTable is a simple abstraction to efficiently store large numbers of key-value pairs while optimizing for high throughput, sequ…
最近发现很多数据库都使用了 LSM Tree 的存储模型,包括 LevelDB,HBase,Google BigTable,Cassandra,InfluxDB 等.之前还没有留意这么设计的原因,最近调研时间序列数据库的时候才发现这样设计的优势所在,所以重新又复习了一遍 LSM Tree 的原理. 特点 总的来说就是通过将大量的随机写转换为顺序写,从而极大地提升了数据写入的性能,虽然与此同时牺牲了部分读的性能. 只适合存储 key 值有序且写入大于读取的数据,或者读取操作通常是 key 值连续的…
一种树,适合于写多读少的场景.主要是利用了延迟更新.批量写.顺序写磁盘(磁盘sequence access比random access快). 背景 回顾数据存储的两个“极端”发展方向 加快读:加索引(B+树.二分查找树等) 目的是为了尽快查到目标数据,从而提高查询速度:但由于写入数据时同时要维护索引,故写效率较低. 加快写:纯日志型,不加索引,数据以append方式追加写入 append利用了“磁盘顺序写比任意写性能高”的特性,使得写入速度非常高(接近磁盘理论写入速度):因缺乏索引支持故需要扫描…
Coming from http://blog.sina.com.cn/s/blog_693f08470101njc7.html 今天来聊聊lsm tree,它的全称是log structured merge tree ,简单来说,lsm tree可以认为是针对传统b树在磁盘写入上低劣表现的一种优化,其核心思想的核心就是放弃部分读能力,换取写入的最大化能力.所以你可以看到几乎所有的nosql都在跟b树拼写入速度和延迟.这是为什么呢? 看了今天的文章大家就应该能够有个比较清晰的认识了:)   要了…