非关系型数据库都有哪些

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数据库、对象数据库等,每一种数据库都有其独特的优势和用途。在实际开发中,我们应根据自己的需求来选择最适合的非关系型数据库。

数据库标签