1. 简介
随着互联网技术的不断发展,数据量也随之不断增加。而传统关系型数据库在处理大数据量时,遇到了很多问题,比如性能问题、扩展性问题等等。因此,非关系型数据库应运而生。
非关系型数据库(NoSQL)是指不使用传统关系分析型数据库的一类数据库管理系统,针对大规模数据集合的高性能、可扩展、无模式化等问题设计的一类数据库。不同于传统关系型数据库,非关系型数据库使用其他的数据模型,如文档、键-值(key-value)、图形等模型。
2. 常见非关系型数据库
在非关系型数据库领域,有很多种数据库,下面介绍几种常见的。
2.1 文档型数据库
文档型数据库以类似 JSON 的格式存储数据,任何文档的内部结构都是自由的。文档型数据库比关系型数据库更加灵活、可扩展。
举例:MongoDB
const MongoClient = require('mongodb').MongoClient;
// 连接URL
const url = 'mongodb://localhost:27017';
// 数据库名称
const dbName = 'myproject';
// 创建连接实例
const client = new MongoClient(url);
// 连接到mongoDB服务器
client.connect(function(err){
console.log("Connected successfully to server");
const db = client.db(dbName);
// 插入数据
db.collection('mycollection').insertOne({
name: "lily",
age: 20,
gender: "female"
}, function(err, result) {
console.log("Inserted document into the collection");
});
client.close();
});
2.2 键值型数据库
键值型数据库是一种基于哈希表的KV存储系统,它通过key来快速查找value。由于其基于内存进行存储,所以在性能上比其他类型的数据库更快。
举例:Redis
// 引入redis模块
var redis = require("redis");
// 创建redis客户端实例
var client = redis.createClient();
// 设定key-value
client.set("name", "lily", function(err, reply){
console.log(reply);
});
// 获取value
client.get("name", function(err, reply){
console.log(reply);
});
// 关闭客户端实例
client.quit();
2.3 列族型数据库
列族型数据库把数据存储在列簇中,每个列簇由多个列组成,每个列包含值,这种方式在存储非结构化的数据时能达到很好的效果。列族型数据库也具有很好的可扩展性。
举例:HBase
//引入hbase模块
var HBase = require('hbase');
// 创建客户端实例并连接
var client = new HBase.Client({
zookeeperHosts: ['localhost:2181']
});
// 打印所有表名称
client.getTableNames((err, tableNames) => {
console.log(tableNames);
});
// 新建表
client.createTable('mytable', ['mycolumn'], (err, success) => {
console.log(success);
});
// 插入值
client.put('mytable', 'rowkey1', {'mycolumn:name': 'lucy', 'mycolumn:age': '18'}, (err, success) => {
console.log(success);
});
// 获取值
client.get('mytable', 'rowkey1', ['mycolumn:name', 'mycolumn:age'], (err, cells) => {
console.log(cells);
});
// 关闭客户端实例
client.close();
2.4 图形数据库
图形数据库主要用于存储图形结构,包括网络、社交网站等数据。图形数据库基于图论理论,可以进行复杂图形结构的查询和处理,适合海量关联数据存储和查询。
举例:Neo4j
// 引入neo4j模块
var neo4j = require('neo4j-driver').v1;
// 连接neo4j数据库
var driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("user", "password"));
// 打开会话
var session = driver.session();
// 添加节点
session.run('CREATE (n:Person {name: "Tom Hanks"})')
.then(result => {
console.log(result);
})
.catch(error => {
console.log(error);
})
.then(() => {
session.close();
})
.catch(error => {
console.log(error);
});
// 查询节点
session.run('MATCH (n:Person) RETURN n.name AS name')
.then(result => {
console.log(result);
})
.catch(error => {
console.log(error);
})
.then(() => {
session.close();
})
.catch(error => {
console.log(error);
});
3. 总结
目前非关系型数据库除了上述几种外,还有文本型、XML数据库、对象数据库等,每一种数据库都有其独特的优势和用途。在实际开发中,我们应根据自己的需求来选择最适合的非关系型数据库。