LevelDB là gì?

Published:




LevelDB là một thư viện lưu trữ theo dạng key-value được viết bởi Google, LevelDB được sort theo keys và sử dụng Snappy để nén dữ liệu do đó data được nén rất tốn giúp giảm dung lượng lưu trữ.
có các hàm cơ bản của 1 keys values như : Get(), Put(), Del(), Batch()

# Kiến trúc cơ bản của levelDB



Tất cả dữ liệu khi được đưa vào LevelDB sẽ được ghi thẳng vào log và một “memtable”. Log này thường xuyên được ghi vào 1 file được gọi là sorted string table (SST)

khi đọc thì dữ liệu được lấy ra từ Log và SST và được đưa vào phần Cache để giúp việc đọc dữ liệu nhanh hơn Cache được lưu trên Ram

Mỗi SST được giới hạn ~2MB do đó LevelDB có rất nhiều file SST.

Dữ liệu trong LevelDB được lưu theo các level

Log: tối đa là 4MB sau đó được ghi vào các file SST ở Level 0
Level 0: tối data là 4 file SST sau đó 1 file SST được chuyuển vào Level 1
Level 1: tổng kích thước là 10MB sau đó 1 file SST được chuyuển vào Level 2
Level 2: tổng kích thước là 100MB sau đó 1 file SST được chuyuển vào Level 3
Level 3+: cứ như vâyj thổng kích thước của level này = level trước nó x 10 và sau đó 1 file được chuyển xuống level cao hơn.
như vậy ta có
0 ↠ 4 SST, 1 ↠ 10M, 2 ↠ 100M, 3 ↠ 1G, 4 ↠ 10G, 5 ↠ 100G, 6 ↠ 1T, 7 ↠ 10T



Dùng levelDB với Nodejs

1
$ npm install levelup leveldown

hoặc
1
$ npm install level

các dùng leveldb trong nodejs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 var levelup = require('levelup')

// 1) Create our database, supply location and options.
//    This will create or open the underlying LevelDB store.
var db = levelup('./mydb')

// 2) put a key & value
db.put('name', 'LevelUP', function (err) {
  if (err) return console.log('Ooops!', err) // some kind of I/O error

  // 3) fetch by key
  db.get('name', function (err, value) {
    if (err) return console.log('Ooops!', err) // likely the key was not found

    // ta da!
    console.log('name=' + value)
  })
})

API

  • levelup()
  • db.open()
  • db.close()
  • db.put()
  • db.get()
  • db.del()
  • db.batch() (array form)
  • db.batch() (chained form)
  • db.isOpen()
  • db.isClosed()
  • db.createReadStream()
  • db.createKeyStream()
  • db.createValueStream()
  • db.createWriteStream()

xem docs chi tiết ở github/node-levelup