Skip to content
/ hive-fs Public

hive-fs 是一个 k-v 存储引擎, Leviathan 基础组件. (跟 Apache Hadoop 的 Hive 无关...)

Notifications You must be signed in to change notification settings

abbshr/hive-fs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

H.I.V.E - fs

hive-fs 是一个用 CoffeeScript 写的 基于索引和偏移量 的文件系统.

原本是针对我的毕业设计 Archangel 而设计实现的, Leviathan 内部组件之一, 用于在多个 Nero-Kodiak 集群节点之间/内部同步 Gateway 的核心数据块(配置信息), 也同样适用于一些其他基础层面的同步服务.

架构

Slot 索引

Tuple 结构

Chunk 结构

块缓冲 & 回写

资源管理

空闲表

Slot 回收与重用

分配不定长 Chunk

资源限制(参数待调优)

lib/constants.coffee:

# cell
# KEYSIZE: 32B # Cell 中每个 key 的最大字节长度, ('idx' 不存储)
BYTESIZE: 4B # 存储 Cell 中每个 value 的最大字节长度, 即标准 4 字节整型长度
# freelst
UNITSIZE: 8B # 空闲表中每条记录的最大字节长度, 包括: 4 字节的整数表示空闲 slot 的起始 seek 位置, 1 字节的整数表示连续块数量
# seek index
TUPLESIZE: 270B # seek-index 表中每条记录的最大字节长度, 包括: 1 字节的整数表示该 tuple 是否空闲, 4 字节的整数表示某个 Cell 的起始 seek 位置, 1 字节的整数表示连续块数量, 8 字节存储时间戳, 剩余 256 字节是索引占用的最大字节长度.
BLKSIZE: 1KB # 每个 Slot 块的标准大小

示例 && API

{Hive} = require './'

# Hive 配置(可选)
cfg =
  dirname: '/dev/shm'
  basename: 'hive-fs'

value =
  name: 'Ran Aizen'
  id: 1237104
  activeDay: [1,3,5,7,9]
  following: ['@_the_flash', '@_batman', '@_the_arrow', '@_superman']

hive = new Hive cfg
# 申请 slots, 并构造一个 chunk 来写数据
hive.write 'github:abbshr', data, (err) ->
# 跳至索引记录的 slot 偏移量, 从 buffer 构建 chunk
hive.seek 'github:abbshr', (err, value) ->
# 释放一个 cell
hive.free 'github:abbshr', (err) ->
# 关闭 hive
hive.close (err) ->

建议: 配合共享内存以进一步提升性能.

About

hive-fs 是一个 k-v 存储引擎, Leviathan 基础组件. (跟 Apache Hadoop 的 Hive 无关...)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published