想请教下各位,nebula的数据文件存储是不是通过文件累加的方式?
比如一开始只有少数几个数据文件,然后当不断地有数据生成后,数据文件会增大,是否某个数据文件大小到一定程度后,后面进来的数据,是否就会继续生成新的数据文件,来存储新进来的数据?有人可以大概描述下这个机制吗?
如下图,在/nebula/data/storage/nebula/0/data/路径下,有那么多的LOG.oldxxxx文件
与之相反的是neo4j,我看neo4j就是某个文件就是固定用来存储节点的,节点越多,这个文件就不断地增大?
我们底层存储是rocksdb,/nebula/data/storage/nebula/0/data/ 是rocksdb的数据目录,你可以自行查阅rocksdb的文件结构。
spw
3
RocksDB 用的 LSM-Tree 引擎。
该引擎会:
- 先写内存数据结构(一个有序表:跳表),然后使用 WAL(也就是图中的 LOG.*)来保证宕机可恢复性。
- 当内存中有序表到达一定尺寸之后,就会刷到磁盘中,对应上图中的 xxxx.sst 文件。
- 当 sst 文件过多的时候,后来线程就会对其自动合并,来减少 sst 数量。
你上面图中 LOG.old 有点过多,可以通过设置 rocksdb 的 keep_log_file_num 配置项来减少 LOG.old
2 个赞
system
关闭
5
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。