几乎所有的程序,不管是不是基于Web的,都需要某种类型的数据存储机制,用Node构建的程序也不例外。选择合适的存储机制取决于以下五个因素:
存储什么数据;
为了保证性能,要有多快的数据读取和写入速度;
有多少数据;
要怎么查询数据;
数据要保存多久,对可靠性有什么要求。
我们主要讨论三种选择:
存储数据而无需安装和配置DBMS;
用关系型数据库存储数据,具体说就是MySQL和PostgreSQL;
用NoSQL数据库存储数据,具体说就是Redis、MongoDB和Mongoose。
1.无服务的数据存储
对于那些运行在自己服务器上的Node程序来说,比如Web程序和其他TCP/IP程序。它还特别适合命令行界面(CLI)工具:Node驱动的CLI工具很可能要存储数据,但用户不太可能为了用这个工具而再去大费周章地搭一个MySQL服务器。
内存存储和基于文件的存储是无服务器数据存储的
主要形式
1.1 内存存储
内存存储用变量存放数据。这种数据的读取和写入都很快,但就像我们在前面提过的,服务器和程序重启后数据就丢了。
内存存储的理想用途是存放少量经常使用的数据。用来跟踪记录最近一次重启服务器后页面访问次数的计数器就是这样的应用场景。比如对所有请求进行计数:
1.2 基于文件的存储
基于文件的存储,用文件系统存放数据。开发人员经常用这种存储方式保存程序的配置信息,但你也可以用它做数据的持久化保存,这些数据在程序和服务器重启后依然有效。
2 关系型数据库管理系统
关系数据库管理系统(RDBMS)可以存储复杂的信息,并且查询起来很容易。关系型数据库有很多种,但开发人员一般会选择开源数据库,主要是因为它们有很好的支持,好用,而且不用花一分钱。比如:Mysql。
2.1 Mysql
MySQL是最流行的SQL数据库,Node社区对它的支持很好:
3 NoSQL 数据库
在数据库世界刚具雏形之时,非关系型数据库才是标准。但关系型数据库渐渐兴起,成为主流选择,在不在Web上的程序都会用它。最近几年,非关系型DBMS隐隐有复兴之势,其支持者宣称它们在能力扩展和易用性上比关系型数据库有优势,并且这些DBMS可以应对多种应用场景。大家将它们称为“NoSQL”数据库,即“No SQL” 或“Not Only SQL”。
尽管关系型DBMS为可靠性牺牲了性能,但很多NoSQL数据库把性能放在了第一位。因此,对于实时分析或消息传递而言,NoSQL数据库可能是更好的选择。NoSQL数据库通常也不需要预先定义数据schema,对于那种要把数据存储在层次结构中,但层次结构却会发生变化的程序而言,这很有帮助。比如:Redis和MongoDB。
Mongoose,一个很受欢迎的MongoDB访问层API,它有一些可以帮你节省时间的功能
3.1 Redis
Redis非常适合处理那些不需要长期访问的简单数据存储,比如短信和游戏中的数据。Redis把数据存在RAM中,并在磁盘中记录数据的变化。这样做的缺点是它的存储空间有限,但好处是数据操作非常快。如果Redis服务器崩溃,RAM中的内容丢了,可以用磁盘中的日志恢复数据。
3.2 MongoDB
MongoDB数据库把文档存在集合(collection)中。集合中的文档,它们不需要相同的schema,每个文档都可以有不同的schema。 这使得MongoDB比传统的RDBMS更灵活,因为你不用为预先定义schema而操心。
最成熟、维护最活跃的MongoDB API模块是Christian Amor Kvalheim的 node-mongodb-native。你可以用下面的npm命令安装它。
npm install mongodb