node操作leveldb基础操作 | 您所在的位置:网站首页 › node操作pdf的库 › node操作leveldb基础操作 |
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 实验室设备网 版权所有 |