基于LSM的Key-Value数据库实现稀疏索引篇

  上篇文章简单的填了一个坑基于LSM数据库的实现了WAL,在该版本中如数据写入到内存表的同时将未持久化的数据写入到WAL文件,在未将数据持久化时程序崩溃,可通过WAL文件将数据还原恢复从而避免了数据的丢失。 目前此基于LSM的数据库还有三大坑:    1、索引问题    2、SSTable合并

基于LSM的Key-Value数据库实现WAL篇

  上篇文章简单的实现了基于LSM数据库的初步版本,在该版本中如数据写入到内存表后但还为持久化到SSTable排序字符串表,此时正好程序崩溃,内存表中暂未持久化的数据将会丢失。   上篇文章简单的实现了基于LSM数据库的初步版本,在该版本中如数据写入到内存表后但还未持久化到SSTable排序字符串表

基于LSM的Key-Value数据库实现初篇

  前篇文章对LSM的基本原理,算法流程做了简单的介绍,这篇文章将实现一个简单的基于LSM算法的迷你Key-Value数据库,结合上篇文章的理论与本篇文章的实践使之对LSM算法有更好的理解,当然此版本还有很大问题只是Demo模型,后面也会指出;   此LSMDB有支持常见的数据库四大功能:CURD(

LSM-Tree:原理与介绍

  LSM Tree(log-structured merge-tree)是一种文件组织结构的数据结构,目前在不少数据库中都有使用到,如SQLite、LevelDB、HBase在Mongodb中也有一个LSM引擎;   在传统的关系型数据库中使用的是B-/B+ tree作为索引的数据结构,B tre

在Win11的WSL中体验IDEA等GUI程序

  原本已经放弃WSL很久了,这两天把Win10更新到Win11,看到WSL2已经发布,而且貌似还有很大升级还可以在WSL中跑Linux GUI应用。在加上Win11的支持简直可以做到Win+Linux无缝链接。安装完成GUI程序后会在可将其加入到开始菜单当中,单击就可以一键启动Linux下的程序;

系统调用跟踪——ls功能实现(二)

  在上篇文章中我们跟踪ls命令看到了其所使用的这么几个系统调用:stat、openat、fstat、getdents、close、write等,这里再简单介绍下这几个系统调用的功能:   stat:为获取文件状态系统调用   openat:将打开目录/data获取它的文件描述符,返回值3即为文件描

系统调用跟踪——分析(一)

  通过strace工具可跟踪用户进程与Linux内核的调用交互,可看到其中的System Call(系统调用情况)情况; 安装strace: apt-get instsall strace   strace安装完成后执行:strace ls /data即可看到ls命令执行时所执行的系统调用情况,

使用ANSI改变终端输出样式

  默认情况下程序输出到终端的字符样式为白字黑背景,样式、字体比较单一。如想改变程序输出到终端字符的样式等可使用ANSI转移码使其输出具有不同样式; ANSI转义序   ANSI转义序列包括这三个部分组成:前置引导,CSI转义序列,结束符号 1、前置引导: 为ESC的ASCII值(\033,\0x1

Golang中的空字符,似花不是花

  最近在Linux下开发Go程序,发现一个奇怪的问题,在读取Linux系统信息时读到了空字符,导致了程序异常。在ASSIC中十六进制0为字符NUT,表示为空字符NULL。但这个字符在不同的编程语言、不同的运行环境中却有着不一样的呈现,如果换一个角度看,空字符也就是无字符也就能解释ASSIC空字符没

在Golang中是锁或Channel还是Atomic

  与其他编程语言一样在并发环境下如不对多个goroutine(线程)访问或修改的共享资源元素的进行控制,让进入临界区的对象互斥。就可能会出现数据异常情况;   一个非线程安全对象如下,如不对Id的访问进行控制,多个goroutine进行更新Id字段是就会出现数据不一致的情况,如下示例: type
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×