成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個全新的 kv 存儲引擎-LotusDB

存儲 存儲架構
有了 rosedb 在 bitcask 模型上的實踐之后,以及自己在存儲這方面的一些經驗積累,去年底的時候,在上班路上突然想到的一個 idea,讓我有了做一個新的 kv 存儲引擎的想法。

經歷了大概 4 個月的打磨,LotusDB 的第一個 release 版本終于發布了,我看了下,有 200 多次 commit(接近 rosedb 一年多的 commit 次數了)。

項目地址:https://github.com/flower-corp/lotusdb

有了 rosedb 在 bitcask 模型上的實踐之后,以及自己在存儲這方面的一些經驗積累,去年底的時候,在上班路上突然想到的一個 idea,讓我有了做一個新的 kv 存儲引擎的想法。

有了想法之后便是驗證,因為其實心里還是沒譜,我又在 Github 上翻了翻,并沒有同類型的實現。后來又找一些大佬溝通了下,證明我的想法是可行的。

這期間還發現了 Usenix Fast 上的一篇關于優化 LSM 的論文,發現論文的內容跟我的 idea 非常類似,這算是又多了一個理論依據,于是便決定開干了。

眾所周知,數據存儲引擎,目前最主流的兩種模型是 B+ 樹和 LSM 樹,B+ 樹在關系型數據庫例如 Mysql 中應用比較廣泛,而 LSM 的典型代表 rocksdb 也是大多數分布式系統數據落盤的首選。

B+ 樹讀性能穩定,而 LSM 寫吞吐高,LotusDB 在這基礎上做了一個巨大的改動,就是完全舍棄掉 LSM 中的 SST 文件,改由 B+ 樹來存儲索引,而 value 存放則參考了 Wisckey 和 bitcask 模型的設計,存儲到單獨的 value log 文件中。

LotusDB 是對 LSM 和 B+ 樹的優勢結合,目前并沒有同類型的實現,我們應該是第一個吃螃蟹的人。

LotusDB 的架構圖如下:

前臺的寫入和 LSM 完全一致,先寫 wal 再寫 memtable。

而讀取則會從 memtable 開始,如果 memtable 找到了,直接返回;沒找到的話則從 B+ 樹中查詢索引,然后根據索引信息到 value log 中獲取 value。

大家可以先了解個大概,后續我會出一個完整的《LotusDB 設計與實現》系列文章,全面解析 LotusDB 的架構細節以及代碼實現,目前已經寫了幾篇待發布,歡迎關注公眾號的后續更新:

再來看看 LotusDB 提供的一些基本接口,目前實現了基礎的 Put、Get、Delete 接口,并且支持 Column Family(借鑒于 rocksdb),以及 value log 的自動 GC 回收。

簡單的使用方法如下:

package main

import (
"github.com/flower-corp/lotusdb"
"io/ioutil"
"time"
)

// basic operations for LotusDB:
// put
// put with options
// get
// delete
// delete with options
func main() {
path, _ := ioutil.TempDir("", "lotusdb")
opts := lotusdb.DefaultOptions(path)
db, err := lotusdb.Open(opts)
if err != nil {
panic(err)
}
defer db.Close()

// 1.----put----
key1 := []byte("name")
err = db.Put(key1, []byte("lotusdb"))
if err != nil {
// ...
}

key2 := []byte("feature")
// 2.----put with options----
writeOpts := &lotusdb.WriteOptions{
Sync: true,
ExpiredAt: time.Now().Add(time.Second * 100).Unix(),
}
err = db.PutWithOptions(key2, []byte("store data"), writeOpts)
if err != nil {
// ...
}

// 3.----get----
val, err := db.Get(key1)
if err != nil {
// ...
}
if len(val) > 0 {
// ...
}

// 4.----delete----
err = db.Delete(key1)
if err != nil {
// ...
}

// 5.----delete with options----
deleteOpts := &lotusdb.WriteOptions{
Sync: false,
DisableWal: true,
}
err = db.DeleteWithOptions([]byte("dummy key"), deleteOpts)
if err != nil {
// ...
}
}

目前自認為 LotusDB 的代碼質量比之前的 RoseDB 好多了,單元測試更加完備,注釋清晰,代碼也更加簡潔規范,如果你是 Go 新手,或者準備學習 Go,也能夠把項目當做練習素材,自己對照著來學習。

當然我們的愿景還是打造一個能夠在生產環境中實際落地的存儲引擎,目前的版本只是一個開始,后續還會有非常多的工作,包括但不限于:

  • batch 操作,保證原子性
  • 多個 Column Family 保證原子性
  • 基于 SSI 的事務
  • Iterator 迭代器
  • 數據壓縮
  • 數據備份
  • index 的分裂
責任編輯:武曉燕 來源: roseduan寫字的地方
相關推薦

2025-04-17 01:30:00

開源PostgreSQL存儲引擎

2020-03-13 10:36:19

KV存儲性能

2021-06-30 07:19:36

網絡安全

2015-08-19 09:29:35

Git協議編寫

2013-01-25 09:53:40

GitHub

2023-05-11 07:30:10

KV存儲GC優化

2018-10-16 16:46:14

華為云

2020-06-02 10:04:58

IT部門首席信息官CIO

2015-12-02 11:23:38

DockerUber容器服務

2010-03-31 17:21:04

云計算

2024-08-14 13:24:24

2022-10-26 10:56:29

數據庫存儲引擎

2012-05-10 16:32:01

Hadoop

2017-08-11 17:55:48

前端JavaScript模板引擎

2023-10-10 08:22:12

Tesseract庫開源

2023-02-06 09:44:35

美圖開源kv存儲

2023-07-30 17:34:53

KV存儲ChunkPosit

2016-12-20 10:59:43

MySQL存儲insert

2024-05-27 00:00:20

2009-08-02 16:46:20

綠色IT服務器虛擬化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人精品视频99在线观看免费 | 久久99精品久久久久久 | 欧美二区在线 | 精品视频999 | 日本aaa视频 | 在线免费观看黄色 | 国产丝袜一区二区三区免费视频 | 91亚洲精品久久久电影 | 91视频88av| 宅男噜噜噜66一区二区 | 欧美大片黄 | 亚洲一区久久 | 野狼在线社区2017入口 | 国产我和子的乱视频网站 | 亚洲欧美一区二区三区情侣bbw | xxxxx黄色片| av大片在线| 亚洲欧洲成人在线 | 精品国产免费一区二区三区演员表 | 亚洲欧美精品在线观看 | 成人在线观看免费视频 | 国产欧美在线播放 | 亚洲精品久久久久久久久久久久久 | 99久久精品国产一区二区三区 | 激情六月丁香婷婷 | 日本精品视频在线观看 | 免费久久久 | 中文在线a在线 | 逼逼视频| 亚洲欧洲视频 | 国产精品永久久久久久久www | 久久这里只有精品首页 | 日韩成人高清在线 | 精品一区在线 | 国产高清视频 | 国产一区二区三区免费 | 欧美网站一区 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | av网站在线免费观看 | 成人免费观看男女羞羞视频 | 日韩精品一区二区三区高清免费 |