首页主机资讯Node.js在Linux上如何进行数据存储

Node.js在Linux上如何进行数据存储

时间2025-11-10 19:37:03发布访客分类主机资讯浏览686
导读:Node.js在Linux上的数据存储方式 1. 文件系统存储(内置fs模块) 文件系统是Node.js最基础的数据存储方式,通过内置的fs模块实现文件的读写、追加、删除等操作,适合存储配置文件、日志、静态资源等非结构化或小规模数据。 基...

Node.js在Linux上的数据存储方式

1. 文件系统存储(内置fs模块)

文件系统是Node.js最基础的数据存储方式,通过内置的fs模块实现文件的读写、追加、删除等操作,适合存储配置文件、日志、静态资源等非结构化或小规模数据。

  • 基本操作示例
    • 写入文件(异步):fs.writeFile('data.json', JSON.stringify({ name: 'John'} ), (err) => err ? console.error(err) : console.log('写入成功'));
    • 读取文件(异步):fs.readFile('data.json', 'utf8', (err, data) => err ? console.error(err) : console.log('文件内容:', data));
    • 追加内容:fs.appendFile('log.txt', \n${ new Date()} : 新日志, (err) => err & & console.error(err));
    • 删除文件:fs.unlink('temp.txt', (err) => err & & console.error(err));
  • 注意事项
    • 异步操作不会阻塞事件循环,适合高并发场景;同步操作(如fs.writeFileSync)会阻塞,仅在初始化等场景使用。
    • 多用户并发读写同一文件时需通过锁机制(如proper-lockfile库)避免数据覆盖。

2. 关系型数据库存储(MySQL/PostgreSQL)

关系型数据库适合存储结构化数据(如用户信息、订单数据),支持复杂的SQL查询和事务处理。Linux环境下常用MySQL(流行度高)或PostgreSQL(标准兼容性好)。

  • MySQL存储步骤
    1. 安装MySQLsudo yum install mysql-server -y & & sudo systemctl start mysqld & & sudo systemctl enable mysqld
    2. 创建数据库与表:登录MySQL后执行CREATE DATABASE mydb; USE mydb; CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT);
    3. Node.js连接与操作
      • 安装驱动:npm install mysql2(比mysql更高效)。
      • 代码示例:
        const mysql = require('mysql2/promise');
        
        async function main() {
        
          const connection = await mysql.createConnection({
        host: 'localhost', user: 'root', password: '123456', database: 'mydb'}
            );
            
          await connection.execute('INSERT INTO users (name, age) VALUES (?, ?)', ['Alice', 25]);
            
          const [rows] = await connection.execute('SELECT * FROM users WHERE name = ?', ['Alice']);
            
          console.log(rows);
             // 输出查询结果
          await connection.end();
        
        }
            
        main().catch(console.error);
            
        
  • PostgreSQL存储步骤
    1. 安装PostgreSQLsudo yum install postgresql-server postgresql-contrib -y & & sudo postgresql-setup --initdb --unit postgresql & & sudo systemctl start postgresql & & sudo systemctl enable postgresql
    2. 创建数据库与表:切换至postgres用户,执行createdb mydb & & psql mydb -c "CREATE TABLE products (id SERIAL PRIMARY KEY, name VARCHAR(100), price DECIMAL(10,2)); "
    3. Node.js连接与操作
      • 安装驱动:npm install pg
      • 代码示例:
        const {
         Client }
             = require('pg');
        
        async function main() {
        
          const client = new Client({
        user: 'postgres', password: '123456', host: 'localhost', database: 'mydb'}
            );
            
          await client.connect();
            
          await client.query('INSERT INTO products (name, price) VALUES ($1, $2)', ['Laptop', 999.99]);
            
          const res = await client.query('SELECT * FROM products WHERE name = $1', ['Laptop']);
            
          console.log(res.rows);
             // 输出查询结果
          await client.end();
        
        }
            
        main().catch(console.error);
            
        
  • 注意事项
    • 使用参数化查询(如?$1)防止SQL注入。
    • 生产环境需配置数据库用户权限、备份策略(如mysqldumppg_dump)。

3. NoSQL数据库存储(MongoDB)

MongoDB是非关系型数据库,适合存储半结构化/非结构化数据(如JSON文档、日志、用户行为数据),无需预定义表结构,扩展性强。

  • 存储步骤
    1. 安装MongoDB
      • 添加官方仓库:cat < < EOF | sudo tee /etc/yum.repos.d/mongodb-org.repo\n[mongodb-org-6.0]\nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/6.0/x86_64/\ngpgcheck=1\nenabled=1\ngpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc\nEOF
      • 安装并启动:sudo yum install -y mongodb-org & & sudo systemctl start mongod & & sudo systemctl enable mongod
    2. Node.js连接与操作
      • 安装驱动:npm install mongodb
      • 代码示例:
        const {
         MongoClient }
             = require('mongodb');
        
        async function main() {
        
          const client = new MongoClient('mongodb://localhost:27017', {
        useNewUrlParser: true, useUnifiedTopology: true}
            );
            
          await client.connect();
            
          const db = client.db('mydb');
            
          const collection = db.collection('tasks');
        
          // 插入文档
          await collection.insertOne({
        title: 'Learn Node.js', completed: false}
            );
        
          // 查询文档
          const task = await collection.findOne({
        title: 'Learn Node.js'}
            );
            
          console.log(task);
             // 输出查询结果
          await client.close();
        
        }
            
        main().catch(console.error);
            
        
  • 注意事项
    • MongoDB默认监听27017端口,生产环境需配置认证(如--auth参数)和绑定IP(如--bind_ip_all)。
    • 适合高并发、海量数据的场景,但不支持复杂事务(如跨文档更新)。

4. 缓存存储(Redis)

Redis是内存数据库,适合存储临时数据(如会话信息、热点数据、计数器),读写速度快(微秒级响应),支持多种数据结构(字符串、哈希、列表等)。

  • 存储步骤
    1. 安装Redissudo yum install redis -y & & sudo systemctl start redis & & sudo systemctl enable redis
    2. Node.js连接与操作
      • 安装驱动:npm install redis
      • 代码示例:
        const redis = require('redis');
            
        const client = redis.createClient();
            
        client.on('error', (err) =>
             console.error('Redis错误:', err));
            
        client.connect().then(() =>
         {
        
          // 设置键值对(过期时间1小时)
          client.set('session:123', 'user_token_abc', {
        EX: 3600}
            );
            
          // 获取键值对
          client.get('session:123').then((value) =>
             console.log('Session:', value));
            
          // 存储哈希(用户信息)
          client.hSet('user:1', 'name', 'Alice', 'age', 25);
            
          client.hGetAll('user:1').then((user) =>
             console.log('User:', user));
        
        }
            ).catch(console.error);
            
        
  • 注意事项
    • Redis数据存储在内存中,重启后会丢失(可通过RDB/AOF持久化配置解决)。
    • 生产环境建议使用Redis集群提高可用性和扩展性(如ioredis库支持集群)。

5. 日志存储

日志是应用运行的重要记录,可用于排查问题、审计等,Linux环境下可通过以下方式存储:

  • 文件系统存储:使用fs模块将日志追加到文件(如logs/app.log),适合简单场景。
  • 日志库(Winston/Bunyan):提供更强大的功能(如分级日志、多传输、格式化)。
    • Winston示例:
      const winston = require('winston');
      
      const logger = winston.createLogger({
      
        level: 'info',
        format: winston.format.json(),
        transports: [
          new winston.transports.File({
      filename: 'logs/error.log', level: 'error'}
      ),
          new winston.transports.File({
      filename: 'logs/combined.log'}
      ),
        ],
      }
          );
          
      logger.info('This is an info log');
          
      logger.error('This is an error log');
          
      
  • 系统日志(Syslog/Journald):使用pino-syslog等库将日志发送到系统日志(如local0设施),适合集中管理。
  • 远程日志服务器:集成ELK(Elasticsearch+Logstash+Kibana)或Graylog,实现日志的集中存储、搜索和分析。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Node.js在Linux上如何进行数据存储
本文地址: https://pptw.com/jishu/746560.html
Node.js如何在Linux上进行网络编程 Ubuntu回收站文件能远程访问吗

游客 回复需填写必要信息