GithubHelp home page GithubHelp logo

minidb's Introduction

mini-bitcask

rosedb 的 mini 版本,帮助理解 bitcask 存储模型以及 rosedb 项目。

需要说明的是,mini-bitcask 没有实现 bitcask 模型的多个数据文件的机制,为了简单,我只使用了一个数据文件进行读写。但这并不妨碍你理解 bitcask 模型。

我写了一篇文章对 mini-bitcask 进行讲解:从零实现一个 k-v 存储引擎,相信结合文章及 mini-bitcask 的简单的代码,你能够快速上手了。

文章中叫 minidb,但是后来觉得不妥,现已更名为 mini-bitcask

reference

bitcask 模型的论文

https://riak.com/assets/bitcask-intro.pdf

rosedb 项目

rosedb

Usage

package main

import (
	"fmt"

	"github.com/roseduan/minibitcask"
)

func main() {
	db, err := minibitcask.Open("/tmp/minibitcask")
	if err != nil {
		panic(err)
	}

	var (
		key   = []byte("dbname")
		value = []byte("minibitcask")
	)

	err = db.Put(key, value)
	if err != nil {
		panic(err)
	}
	fmt.Printf("1. put kv successfully, key: %s, value: %s.\n", string(key), string(value))

	cur, err := db.Get(key)
	if err != nil {
		panic(err)
	}
	fmt.Printf("2. get value of key %s, the value of key %s is %s.\n", string(key), string(key), string(cur))

	err = db.Del(key)
	if err != nil {
		panic(err)
	}
	fmt.Printf("3. delete key %s.\n", string(key))

	db.Merge()
	fmt.Println("4. compact data to new dbfile.")

	db.Close()
	fmt.Println("5. close minibitcask.")
}

minidb's People

Contributors

biningo avatar her-cat avatar jeremy-run avatar muskonu avatar rfyiamcool avatar roseduan avatar spike014 avatar valiner avatar wujianfeng01 avatar zll600 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

minidb's Issues

如何保障内存hash和磁盘文件索引的一致性?

大佬你好,我是从公众号的文章过来的,目前暂时还没有仔细阅读您的代码,不过通过文章阅读了解到,miniDB使用bitcase模型大致的思路是从内存的hash中取出index,再从数据文件中读取对应index的结果(value),不禁思索,这两个操作应具备事务性,否则会出现数据不一致的情况,这里就是单纯讨论(后续我看完代码后如果发现了相关的内容会补充到issue的下方)

一个小bug

作者你好,我在windows系统下使用时,重复运行main函数时数据文件会越来越大,是否应该在Merge里当len(validEntries) == 0时要删掉数据文件。

我认为minidb,merge有个小问题

在merge中,当有效Entry队列大于0时才进行更新,但是这是由BUG的,就如样例所示,增加后又删除,此时文件里内容应该为空,所以应该把db.go中75行更改为 if len(validEntries) >= 0

你好,这里有个小bug,此处文件已经close,后面便无法读取了

		// 获取文件名
		mergeDBFileName := mergeDBFile.File.Name()
		// 关闭文件
		mergeDBFile.File.Close()
		// 临时文件变更为新的数据文件
		os.Rename(mergeDBFileName, db.dirPath+string(os.PathSeparator)+FileName)
                // x 此处文件已经关闭了,应该重新打开
		db.dbFile = mergeDBFile

      ->
		db.dbFile =  NewDBFile(db.dirPath)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.