node数据存储

数据存储是web服务中很重要的一个环节,在此对存储的几种方式进行记录,分为以下几种:

  • 无服务器的数据存储 1.内存 2.文件
  • 关系型数据库 mysql PostgreSQL
  • nosql数据库 redis mongodb Mongoose模块

一、无服务器存储

内存存储

直接定义变量,存储在内存中

1
2
3
var data = {};
data.a = 1;

文件存储

可以保存配置信息等,服务器存储后仍有效。

并发问题:
同时操作导致覆盖等

1.读文件

1
2
3
4
5
6
7
8
fs.exists( file, function (exists) {
if (exists) {
fs.readFile(file, 'utf8', function (err, data) {
var data = data.toString();
console.log(data);
})
};
})

2.写文件

1
2
3
4
fs.writeFile(file, data, 'utf8', function (err) {
if (err) {throw err};
console.log('保存成功')
})

二、关系型数据库存储

1.mySql

连接数据库

使用第三方库进行连接

1
2
3
4
5
6
7
var mysql = require('mysql');
var db = mysql.createConnection({
host: 127.0.0.1,
user: myuser,
password: mypassword,
database: timetrack
})

访问数据库

使用db.query() 执行sql语句。

1
2
3
4
5
6
db.query(
'SELECT * FROM data_table',
function(err, data){
console.log(data);
}
)

2.PostgreSQL

  • 标准的兼容性、健壮性强
  • 支持递归查询和很多的数据类型

1.连接数据库

1
2
3
4
5
var pg = require('pg');
var conStr = 'tcp://myuser:mypass@localhost:5432/database';
var client = new pg.Client(conStr);
client.connect();

2.query执行查询操作

1
client.query( str, function(err, result){ ... })

三、nosql数据库

对于实时分析和消息传递,性能好,是更好的选择。

1.Redis

  • 适合处理不长期存储的简单数据,数据存储在内存中,读写快。
  • 包含常用的数据结构:哈希表、链表、键值对等

连接数据库

1
2
3
4
5
var redis = require('redis');
var client = redis.createClient(6739, 127.0.0.1);
//注册事件
client.on('error', function(){ ... });

操作数据

1
2
client.set('name', 'wwx', redis.print);
client.get('name', function(err, val){ ...})';

操作哈希数据

1
2
3
4
5
6
7
8
9
10
client.hmset('people',{
'name': 'wwx',
'age': '22'
});
client.hget('people', 'name', function(err, val){
...
});
client.hkeys('people', function(err, keys){...};

操作链表数据

1
2
client.lpush('key', val);
client.lrange('key', 0, -1, function(err, items){ ... });

操作集合数据

1
2
client.sadd('key', val);
client.smembers('key', function(err, members){ ... });

信道传输

####通过hiredis提升性能

2.MongoDB

mongo目前了解的不太多,先记录下使用方法

1.连接数据库

1
2
3
var mongodb = require('mongodb');
var server = new mongodb.Server('127.0.0.1', 27017, {});
var client = new mongodb.Db('database', server, {w:1});

2.访问Mongo集合

1
2
3
4
5
client.open(function(err){
client.collection('key', function(err, collection){
//集合的操作
})
})

3.操作集合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//插入
collection.insert({
'title': 'hello',
'content': 'world'
},
//安全模式,让操作在回调前完成,若不,则用{}代替
{ safe: true },
function(err, document){ ... }
)
//更新
var _id = new client.bson_serializer.ObjectIdD('sdfsdfsadf');
collection.update({
{_id: _id},
{$set: {title: 'no hello'}},
{safe: true},
function(err){}
})
//搜索
collection.find({
title: 'hello'
}.toArray(function(err, results){ ... })
//删除
collection.remove({_id: _id}, {safe: true}, function(){err});

3.Mongoose

先不做深入,后续统一总结。