node操作leveldb基础操作 您所在的位置:网站首页 node操作pdf的库 node操作leveldb基础操作

node操作leveldb基础操作

2023-12-29 05:46| 来源: 网络整理| 查看: 265

Leveldb是一个持久化存储的KV系统。这玩意优点和缺点都很明显,需要详细了解建议去瞻仰官方文档。

node操作leveldb的第三方模块很多,levelup和leveldown、level等,我选用的第三方库就是level,其中提供了put、get、del进行crud操作。

我在网上找了很久,发现很少有全面的使用leveldb的教程,找到一份大佬的demo,但是运行不出来...因为第三方库进行了更新!以下我进行的简单封装,便于直接使用!

const { Level } = require('level') const path = require('path') const database = path.resolve(__dirname, './database') const winston = require('winston') const logger = winston.createLogger({ level: 'info', format: winston.format.json(), defaultMeta: { service: 'leveldb' }, transports: [ new winston.transports.File({ filename: database + '/log/error.log', level: 'error' }), new winston.transports.File({ filename: database + '/log/leveldb.log' }), ], }); class LevelDB { constructor(path) { this.db =new Level(path, { valueEncoding: 'json' }); } async put(key, value) { return new Promise((resolve, reject) => { this.db.put(key, value, (err) => { if (err) { logger.error('Error writing value to LevelDB', { error: err }); reject(err); } else { logger.info('Value written to LevelDB', { key: key, value: value }); resolve("OK"); } }); }); } async get(key) { return new Promise((resolve, reject) => { this.db.get(key, (err, value) => { if (err) { logger.error('Error reading value from LevelDB', { error: err }); reject(err); } else { logger.info('Value read from LevelDB', { key: key, value: value }); resolve(value); } }); }); } async del(key) { return new Promise((resolve, reject) => { this.db.del(key, (err) => { if (err) { logger.error('Error deleting value from LevelDB', { error: err }); reject(err); } else { logger.info('Value deleted from LevelDB', { key: 'key', value: value }); resolve('ok'); } }); }); } async getAllData() { try { let data = [] for await (const [key, value] of this.db.iterator()) { // console.log(value); data.push([key, value]) } return {code: 1, message: "获取数据成功!", data: data} } catch (error) { return {code: -1, message:"该数据不存在,请校验key!" + error} } // return new Promise((resolve, reject) => { // const stream = this.db.createReadStream(); // stream.on('data', (chunk) => { // data.push(chunk); // }); // stream.on('error', (err) => { // reject(err); // }); // stream.on('end', () => { // resolve(data); // }); // }); } async close() { return new Promise((resolve, reject) => { this.db.close((err) => { if (err) { reject(err); } else { resolve(); } }); }); } } module.exports = LevelDB;

原本在构造函数中,我直接固定了path路径,避免数据库的位置被改动,建议在项目中使用的时候固定path,上述代码块进行了简单的日志记录,便于查看解析。

const Level = require('./level) const path = require('path') const database = path.resolve(__dirname, './database') // 建议所有的数据库都写在一个文件夹,除非有特别需求 const db = new Level(database) async function test(){     const res = await db.put('key', 'value')     const res = await db.get('key')     const res = await db.del('key')     console.log(res) } test()

通过上述代码创建的leveldb数据库,位于文件夹database:

数据文件:数据文件包含存储在LevelDB数据库中的键值对数据。在Node.js中创建的LevelDB数据库中,数据文件的文件名通常为“LOG”和“MANIFEST”,其中“LOG”文件包含日志数据,而“MANIFEST”文件包含LevelDB数据库的元数据信息。

锁文件:锁文件用于在数据库操作时保护数据文件。在Node.js中创建的LevelDB数据库中,锁文件的文件名通常为“LOCK”。

临时文件:临时文件用于在数据文件合并过程中暂存中间结果。在Node.js中创建的LevelDB数据库中,临时文件的文件名通常为“LOG.old”和“LOG.new”。

OPTIONS文件:OPTIONS文件包含LevelDB数据库的配置信息。在Node.js中创建的LevelDB数据库中,OPTIONS文件的文件名通常为“OPTIONS”。

总的来说,Node.js创建的LevelDB数据库中的文件与其他编程语言中的LevelDB数据库相似,都包含了数据文件、锁文件、临时文件和配置文件等。这些文件协同工作,使得LevelDB数据库能够高效地存储和管理键值数据。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有