8种NoSQL数据库比较

合集下载

非关系型数据库概念

非关系型数据库概念

非关系型数据库(NoSQL)是一种不同于传统关系型数据库的数据库类型。

与传统关系型数据库(如MySQL、Oracle等)不同,NoSQL数据库通常采用非结构化数据存储方式,以便于处理大规模的数据集合和快速的读写操作。

NoSQL数据库主要有以下几种类型:1. 键值对数据库(Key-Value Store):将数据存储为键值对对的形式,常用的键值对数据库包括Redis和Memcached等。

2. 列式数据库(Column-Family Store):将数据存储为列族的形式,每个列族包含多个列,常用的列式数据库包括HBase和Cassandra等。

3. 文档型数据库(Document-Oriented Store):将数据存储为文档的形式,文档可以包含不同的数据类型和结构,常用的文档型数据库包括MongoDB和Couchbase等。

4. 图数据库(Graph Database):将数据存储为图的形式,每个节点表示一个实体,每个边表示实体之间的关系,常用的图数据库包括Neo4j和OrientDB等。

相对于关系型数据库,NoSQL数据库具有以下优势:1. 高可扩展性:NoSQL数据库可以轻松地进行水平扩展,以适应数据量的增长。

2. 高性能:NoSQL数据库通常采用内存数据库或者磁盘数据库的方式,可以提供更快的读写速度。

3. 灵活的数据模型:NoSQL数据库通常不需要严格的表结构,可以适应不同的数据模型和数据结构。

4. 高可用性:NoSQL数据库通常具有良好的分布式架构,可以提供高可用性和容错性。

但是,NoSQL数据库也存在一些缺点,例如:1. 缺乏标准化:NoSQL数据库的种类繁多,缺乏统一的标准和规范。

2. 缺乏事务支持:NoSQL数据库通常不支持事务处理,对于对数据一致性要求较高的应用场景可能不太适合。

3. 学习成本较高:NoSQL数据库通常采用不同于传统关系型数据库的数据模型和查询语言,需要花费一定的时间和精力进行学习和理解。

NoSQL数据库类型简介

NoSQL数据库类型简介

NoSQL数据库类型简介近些年来,NoSQL数据库的发展势头很快。

据统计,目前已经产生了50 到150 个NoSQL 数据库系统。

但是,归结起来,可以将典型的NoSQL 划分为4 种类型,分别是键值数据库、列式数据库、文档数据库和图形数据库,如图1 所示。

图1 4 种类型的NoSQL 数据库图2 键值数据库举例1. 键值数据库键值数据库起源于Amazon 开发的Dynamo 系统,可以把它理解为一个分布式的Hashmap,支持SET/GET 元操作。

它使用一个哈希表,表中的Key(键)用来定位Value(值),即存储和检索具体的Value。

数据库不能对Value 进行索引和查询,只能通过Key 进行查询。

Value 可以用来存储任意类型的数据,包括整型、字符型、数组、对象等。

如图2 所示。

键值存储的值也可以是比较复杂的结构,如一个新的键值对封装成的一个对象。

一个完整的分布式键值数据库会将Key 按策略尽量均匀地散列在不同的结点上,其中,一致性哈希函数是比较优雅的散列策略,它可以保证当某个结点挂掉时,只有该结点的数据需要重新散列。

在存在大量写操作的情况下,键值数据库可以比关系数据库有明显的性能优势,这是因为关系型数据库需要建立索引来加速查询,当存在大量写操作时,索引会发生频繁更新,从而会产生高昂的索引维护代价。

键值数据库具有良好的伸缩性,理论上讲可以实现数据量的无限扩容。

键值数据库可以进一步划分为内存键值数据库和持久化键值数据库。

内存键值数据库把数据保存在内存中,如Memcached 和Redis。

持久化键值数据库把数据保存在磁盘中,如BerkeleyDB、Voldmort 和Riak。

键值数据库也有自身的局限性,主要是条件查询。

如果只对部分值进行查询或更新,效率会比较低下。

在使用键值数据库时,应该尽量避免多表关联查询。

此外,键值数据库在发生故障时不支持回滚操作,所以无法支持事务。

大多数键值数据库通常不会关心存入的Value 到底是什么,在它看来,那只是一堆字节而已,所以开发者也无法通过Value 的某些属性来获取整个Value。

NoSQL数据库的优势与劣势

NoSQL数据库的优势与劣势

NoSQL数据库的优势与劣势随着大数据和云计算的发展,NoSQL(Not Only SQL)数据库逐渐成为企业和组织在处理大规模数据和实时数据时的首选。

与传统的关系型数据库相比,NoSQL数据库具有许多独特的优势,同时也存在一些劣势。

本文将探讨NoSQL数据库的优势和劣势,并分析其在实际应用中的适用场景。

一、NoSQL数据库的优势1. 高可扩展性:NoSQL数据库采用分布式架构,可以轻松地横向扩展,从而应对大规模数据的存储和处理需求。

通过添加更多的服务器节点,可以实现系统性能的线性增长,提高整体的吞吐量和处理能力。

2. 灵活的数据模型:传统的关系型数据库采用表格模型,需要提前设计好数据结构和关系,而NoSQL数据库则具有更灵活的数据模型。

它可以根据实际需要存储和处理各种类型的数据,包括结构化、半结构化和非结构化数据,如文档、键值对、列族和图等。

3. 高性能:由于NoSQL数据库采用了更简单的数据模型和存储方式,相对于关系型数据库而言,具有更高的读写性能。

它们通常使用内存存储或者基于硬盘的高效存储引擎,可以提供更低的延迟和更高的吞吐量。

4. 强大的可用性和容错性:NoSQL数据库通过数据冗余和分布式架构实现高可用性和容错性。

即使某个节点或服务器出现故障,系统仍然可以继续正常运行,不会导致数据的损失或服务的中断。

这使得企业和组织能够构建高可靠的应用和服务。

5. 适应于大数据和实时数据处理:NoSQL数据库的设计目标之一就是为大规模数据和实时数据处理提供支持。

它们可以轻松地处理海量的数据和高并发的事务,满足现代应用对于高性能和实时性的需求。

二、NoSQL数据库的劣势1. 缺乏标准化:由于NoSQL数据库种类繁多,各自采用不同的数据模型和查询语言,缺乏统一的标准化。

这给开发人员带来了一定的学习和适应成本,同时也增加了系统的复杂性和维护成本。

2. 限制性查询能力:相对于关系型数据库而言,NoSQL数据库在查询能力方面存在一定的限制。

数据库的NoSQL与NewSQL比较

数据库的NoSQL与NewSQL比较

数据库的NoSQL与NewSQL比较数据库管理系统是计算机科学中的重要组成部分,用于存储、管理和检索数据。

传统的关系型数据库在数据处理领域发挥了巨大的作用,但是随着互联网规模的不断扩大,传统数据库在处理大规模、高并发、非结构化数据方面面临着一些挑战。

为了应对这些问题,出现了新型的数据库技术,例如NoSQL与NewSQL。

1. NoSQL数据库NoSQL(Not Only SQL)是一种非关系型数据库,与传统的关系型数据库相比,NoSQL更加灵活、可扩展和容错。

NoSQL数据库在云计算、大数据分析、实时应用等领域得到广泛应用。

与关系型数据库不同,NoSQL数据库不需要提前定义表结构,数据以键值对的形式存储,并且支持水平扩展。

NoSQL数据库一般分为键值存储型、文档型、列存储型和图形数据库等。

2. New SQL数据库NewSQL是对传统关系型数据库的改进和扩展,旨在解决传统数据库在水平扩展和高并发方面的不足。

NewSQL数据库保留了关系型数据库的ACID特性(原子性、一致性、隔离性和持久性),并通过新的架构和算法提高了数据库的性能和可扩展性。

NewSQL数据库适用于大规模的在线事务处理(OLTP)和在线分析处理(OLAP)。

一些常见的NewSQL数据库有VoltDB、CockroachDB和TiDB等。

3. NoSQL与NewSQL的比较3.1 数据模型:NoSQL数据库适用于非结构化数据,不需要预先定义表结构,更加灵活。

而NewSQL数据库保留了关系型数据库的数据模型,适用于结构化数据。

3.2 数据一致性:NoSQL数据库通常追求最终一致性,即数据在分布式环境下可能会有一定的延迟,数据副本之间可能存在不一致。

而NewSQL数据库保证强一致性,通过同步和事务保证数据的一致性。

3.3 扩展性:NoSQL数据库通过水平扩展来应对大规模数据和高并发请求,可以添加更多的服务器节点。

NewSQL数据库也支持水平扩展,但是由于保留了关系型数据库的ACID特性,扩展性可能受到一定限制。

nosql 面试题

nosql 面试题

nosql 面试题NoSQL(Not Only SQL)是一种用于设计和管理大规模分布式数据存储的数据库系统。

与传统的关系型数据库相比,NoSQL数据库更加强调可伸缩性和性能表现。

在面试中,面试官通常会提出一些与NoSQL相关的问题,以评估应聘者对这种数据库系统的理解和运用能力。

以下是一些常见的NoSQL面试题,供参考:1. 请简要介绍NoSQL数据库,并列举几种常见的NoSQL数据库类型。

NoSQL数据库是一种与传统关系型数据库不同的数据库系统,它主要用于处理大规模的非结构化或半结构化数据。

NoSQL数据库采用了分布式计算和存储技术,具有良好的横向扩展性和高性能表现。

常见的NoSQL数据库类型包括键值存储型、文档型、列存储型和图形型数据库。

2. 请解释一下键值存储型数据库的特点,并说明其适用场景。

键值存储型数据库是一种简单的数据库系统,它将数据存储为键值对的形式。

每个键(key)都是唯一的,并与一个对应的值(value)相关联。

键值存储型数据库具有高效的读写性能,适用于需要快速存取数据的场景,如缓存、会话存储等。

3. 什么是文档型数据库?请举例说明其应用场景。

文档型数据库是一种将数据存储为文档的数据库系统。

文档通常采用类似于JSON或XML的格式进行组织,可以包含复杂的数据结构。

文档型数据库具有灵活的数据模型,适用于存储半结构化或非结构化数据。

例如,MongoDB是一种常见的文档型数据库,在Web应用程序中可以用于存储用户信息、文章内容等。

4. 列存储型数据库有哪些优势?请举例说明其使用场景。

列存储型数据库是一种将数据存储为列的数据库系统,它以列为单位进行读写操作,具有较高的读取性能和良好的可压缩性。

列存储型数据库适用于需要查询特定列的场景,如数据分析和业务报表生成。

HBase是一种常见的列存储型数据库,被广泛应用于大数据领域。

5. 图形型数据库的主要特点是什么?请举例说明其应用场景。

图形型数据库是一种专门用于处理图形结构数据的数据库系统。

NoSQL数据库的特点与应用场景

NoSQL数据库的特点与应用场景

NoSQL数据库的特点与应用场景MongoDB、HBase、Redis目录1.NoSQL的四大种类 (3)2.MongoDB (4)3.HBase (6)4.Redis (8)1.NoSQL的四大种类NoSQL数据库在整个数据库领域的江湖地位已经不言而喻。

在大数据时代,虽然RDBMS很优秀,但是面对快速增长的数据规模和日渐复杂的数据模型,RDBMS渐渐力不从心,无法应对很多数据库处理任务,这时NoSQL凭借易扩展、大数据量和高性能以及灵活的数据模型成功的在数据库领域站稳了脚跟。

目前大家基本认同将NoSQL数据库分为四大类:键值存储数据库,文档型数据库,列存储数据库和图形数据库,其中每一种类型的数据库都能够解决关系型数据不能解决的问题。

在实际应用中,NoSQL数据库的分类界限其实没有那么明显,往往会是多种类型的组合体。

主流nosql的详解:MongoDB、Hbase、Redis2.MongoDBMongoDB 是一个高性能,开源,无模式的文档型数据库,开发语言是C++。

它在许多场景下可用于替代统的关系型数据库或键/值存储方式。

1.MongoDB特点∙所用语言:C++∙特点:保留了SQL一些友好的特性(查询,索引)。

∙使用许可:AGPL(发起者:Apache)∙协议:Custom, binary(BSON)∙Master/slave复制(支持自动错误恢复,使用sets 复制)∙内建分片机制∙支持javascript表达式查询∙可在服务器端执行任意的javascript函数∙update-in-place支持比CouchDB更好∙在数据存储时采用内存到文件映射∙对性能的关注超过对功能的要求∙建议最好打开日志功能(参数--journal)∙在32位操作系统上,数据库大小限制在约2.5Gb∙空数据库大约占192Mb∙采用GridFS存储大数据或元数据(不是真正的文件系统)2.MongoDB优点:1)更高的写负载,MongoDB拥有更高的插入速度。

NOSQL数据库的四大类型

NOSQL数据库的四大类型

NOSQL数据库的四⼤类型
1 键值数据库
相关产品:Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached
应⽤:内容缓存
优点:扩展性好、灵活性好、⼤量写操作时性能⾼
缺点:⽆法存储结构化信息、条件查询效率较低
使⽤者:百度云(Redis)、GitHub(Riak)、BestBuy(Riak)、Twitter(Ridis和Memcached)
2 列族数据库
相关产品:BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS
应⽤:分布式数据存储与管理
优点:查找速度快、可扩展性强、容易进⾏分布式扩展、复杂性低
使⽤者:Ebay(Cassandra)、Instagram(Cassandra)、NASA(Cassandra)、Facebook(HBase)3 ⽂档数据库
相关产品:MongoDB、CouchDB、ThruDB、CloudKit、Perservere、Jackrabbit
应⽤:存储、索引并管理⾯向⽂档的数据或者类似的半结构化数据
优点:性能好、灵活性⾼、复杂性低、数据结构灵活
缺点:缺乏统⼀的查询语⾔
使⽤者:百度云数据库(MongoDB)、SAP(MongoDB)
4 图形数据库
相关产品:Neo4J、OrientDB、InfoGrid、GraphDB
应⽤:⼤量复杂、互连接、低结构化的图结构场合,如社交⽹络、推荐系统等
优点:灵活性⾼、⽀持复杂的图形算法、可⽤于构建复杂的关系图谱
缺点:复杂性⾼、只能⽀持⼀定的数据规模。

NoSQL数据库优点与局限性分析

NoSQL数据库优点与局限性分析

NoSQL数据库优点与局限性分析NoSQL数据库是一种非关系型数据库,相对于传统的关系型数据库,它具有一些独特的优点和局限性。

本文将对NoSQL数据库的优点和局限性进行分析,并探讨其在不同应用场景下的适用性。

首先,让我们来看一下NoSQL数据库的优点。

1. 可扩展性:NoSQL数据库以水平扩展为基础,能够在分布式系统中处理大规模数据,实现高可扩展性。

它们能够轻松应对数据量的增长,无需进行架构和模式的更改。

2. 高性能:NoSQL数据库采用了一些优化策略,如键值对存储、面向列或文档的存储结构等,以提供更高的读写性能。

与传统关系型数据库相比,NoSQL数据库能够更快地处理大量的并发操作。

3. 灵活的数据模型:NoSQL数据库对数据模型没有严格的要求,可以根据业务需求灵活存储和查询数据。

它们能够存储结构化、半结构化和非结构化数据,从而满足了不同类型数据的处理需求。

4. 高可用性:NoSQL数据库通常具有内置的多副本和自动故障恢复机制,保证系统的高可用性。

它们能够在节点故障或网络中断时继续运行,并提供持久性数据存储。

然而,NoSQL数据库也存在一些局限性。

下面我们将分析其中的几个。

1. 缺乏标准化:由于NoSQL数据库的多样性,缺乏统一的标准化规范。

这使得开发人员需要根据选择的NoSQL数据库的特性进行学习和适应,增加了开发的复杂性。

2. 数据一致性:对于一些NoSQL数据库来说,数据一致性可能不是首要关注的问题。

一致性在分布式系统中是一个复杂的问题,尤其在面对网络分区等情况时,可能会导致数据不一致的情况。

3. 限制查询功能:相比于关系型数据库,NoSQL数据库在查询能力方面可能有所局限。

一些NoSQL数据库只支持基本的查询操作,对于复杂的查询需求可能不够灵活和高效。

4. 有限的事务支持:NoSQL数据库通常采用弱一致性模型,对事务的支持有限。

在某些应用场景下,如金融系统或电子商务平台,事务的一致性非常重要,这需要额外的开发工作。

浅析NoSQL数据库

浅析NoSQL数据库

站几乎要实时地为用户提供信 息。该类 应用对数据库提 出
了很 高 的 并发 负载 要 求 ,传 统 的R B S 临 很大 的挑 战 。 DM 面
访 问键 值 。 例 如 一 条 员 工 的 记 录 信 息 如 图 1 图2 示 , 有 和 所 N m 、 A e P o e s o 等 键 名 , 各 个 键 名 对 应 着 一 个 键 a e g 、 r f s in
明 地 扩 展 节 点 。 典 型 的N S L 据 库 以k yv le 的 形 式 存 oQ数 e—aus 储 数 据 , 具有 模 式 自由 的特 点 。
2. e - a u s 1 K y v 1e
k y v l e 是 指 一 个 键 名对 应 一 个 键 值 ,可 以通 过 键 名 e—au s
统R B s D M 的缺点 。NS L#N库可部 署在廉价 的硬 件之上 ,支持 分布 式存储 ,能透明地扩展 节点 。本文介 绍 了Ns L oQ  ̄. t . 0Q 数据库 的 基 本 特 点 - 计 思 想 , 列 举 了几种 流 行 的Ns L 据 库 产 品 , 分 析 了其 应 用 方 向 、优 缺 点 及 发展 前 景 。 5设 oQ 数
1 3数据库高扩展性和 高可 用性 需求 .
在 云 计 算 时 代 , 一 很 重 要 的 任 务 就 是 存 储 交 由云 项 端 ,云 计 算 供 应 商 需面 对 存 储 海 量 数 据 的挑 战 。如 果 用 传
厂 I 发 应 用 l ]开
... ..... ... . ...... ...... ..... ..... ..... ...一
卢 冬 海

何 先 波
( 华 师 范 大 学 计 算 机 学 院 , 四川 南 充 6 7 0 ) 西 3 02

关系数据库与NoSQL数据库的比较分析

关系数据库与NoSQL数据库的比较分析

关系数据库与NoSQL数据库的比较分析随着信息技术的不断发展,数据库技术也在不断演进。

关系数据库和NoSQL 数据库是两种常见的数据库类型,它们在数据存储和管理方面有着明显的差异。

本文将对关系数据库和NoSQL数据库进行比较分析,探讨它们的优缺点以及适用场景。

1. 数据模型关系数据库采用的是基于表格的数据模型,数据以行和列的形式存储,每个表格有固定的列和数据类型。

而NoSQL数据库则采用了多种数据模型,如键值对、文档型、列族型和图形型等。

这种灵活性使得NoSQL数据库能够更好地适应不同类型的数据。

2. 数据一致性关系数据库强调数据的一致性,通过事务来保证数据的完整性和一致性。

而NoSQL数据库在一致性方面相对较弱,它们更注重可用性和分布式性能。

这意味着在NoSQL数据库中,数据的一致性可能会有所牺牲,但可以获得更高的可扩展性和性能。

3. 数据查询关系数据库使用结构化查询语言(SQL)进行数据查询,具有强大的查询功能和灵活的数据操作。

而NoSQL数据库则使用各种不同的查询语言,如MongoDB 使用的是基于文档的查询语言。

NoSQL数据库的查询语言相对较简单,适合处理大规模的非结构化数据。

4. 可扩展性关系数据库在扩展性方面有一定的局限性,通常需要通过垂直扩展(增加硬件资源)或水平分区(分片)来提高性能。

而NoSQL数据库天生支持水平扩展,可以通过添加更多的节点来实现更高的性能和容量。

5. 数据安全性关系数据库在数据安全性方面有着成熟的解决方案,支持事务和强大的权限管理。

而NoSQL数据库在数据安全性方面相对较弱,需要依赖应用程序来实现数据的安全性控制。

6. 适用场景关系数据库适用于需要强一致性和复杂查询的场景,如金融系统和企业管理系统等。

而NoSQL数据库适用于大规模数据存储和高性能的场景,如社交媒体、物联网和实时分析等。

综上所述,关系数据库和NoSQL数据库在数据模型、一致性、查询、可扩展性和安全性等方面存在明显的差异。

数据库中的关系型数据库与NoSQL数据库比较

数据库中的关系型数据库与NoSQL数据库比较

数据库中的关系型数据库与NoSQL数据库比较随着数据量的不断增长和数据类型的多样化,数据库的选择也变得越来越重要。

在数据库领域,关系型数据库(RDBMS)与NoSQL数据库两者常常被拿来做比较,它们各自具备一些独特的特点和适用场景。

下面将从数据模型、扩展性、一致性与完整性、性能和可用性等方面对关系型数据库和NoSQL数据库进行对比。

1.数据模型关系型数据库采用表格(表)的形式存储数据,其中每个表具有固定的结构,由行(记录)和列(字段)组成。

表之间通过主键和外键进行关联。

而NoSQL数据库则采用更加灵活的数据模型,如键值对(Key-Value)、列族(Column family)、文档(Document)和图(Graph)等,可以更好地适应非结构化和半结构化数据。

2.扩展性关系型数据库通常在垂直方向上(增加硬件资源)进行扩展,性能和容量的扩展有限。

而NoSQL数据库支持水平扩展,可以通过增加分布式节点来提高性能和容量,具备更好的可扩展性。

3.一致性与完整性关系型数据库以ACID(原子性、一致性、隔离性和持久性)为基础,保证了数据的一致性和完整性,适用于对数据一致性要求较高的应用。

而NoSQL数据库可以灵活地选择一致性级别,如强一致性、事件ual一致性等,适用于对数据一致性要求较低,但对性能要求较高的应用。

4.性能由于NoSQL数据库在数据模型和一致性上的灵活性,相对于关系型数据库具有更高的读写性能。

在处理海量数据和高并发访问的场景下,NoSQL数据库常常能提供更好的性能表现。

5.可用性关系型数据库通常支持主备复制和故障恢复机制,可以提供较高的可用性。

而NoSQL数据库在设计上也可以支持分布式架构和故障转移,保证数据的高可用性。

总结起来,关系型数据库适用于结构化数据、数据一致性要求较高并且事务处理频繁的应用场景,如传统的企业级应用系统。

而NoSQL 数据库则适用于非结构化数据、海量数据处理和高并发访问等需要较高性能和可扩展性的应用场景,如社交媒体、物联网和大数据分析等。

NoSQL数据库的优点与缺点分析

NoSQL数据库的优点与缺点分析

NoSQL数据库的优点与缺点分析NoSQL数据库是一种相比传统关系型数据库(SQL数据库)而言的新型数据库管理系统。

它的设计以解决巨大数据量、高并发性、分布式存储和灵活性等方面的需求为主要目标。

本文将对NoSQL数据库的优点与缺点进行详细分析。

优点:1. 高可扩展性:NoSQL数据库采用分布式架构,可以轻松横向扩展,支持在多个服务器上进行数据分片,降低系统负载。

2. 弱一致性:与关系型数据库(强一致性)不同,NoSQL数据库采用最终一致性,即在一定时间内,数据达到最终一致性,适用于对数据实时性要求不高的场景。

3. 灵活的数据模型:NoSQL数据库提供了多种不同的数据模型,如键值对、文档型、列族型和图形等,可以根据应用需求选择适合的数据模型,提高数据操作的灵活性。

4. 处理大数据量效率高:NoSQL数据库通过在不同服务器上进行数据分片,可以支持大规模数据存储和高并发读写操作,提高系统的性能和扩展性。

5. 低成本:与关系型数据库相比,NoSQL数据库具有更低的成本。

它不需要像传统数据库一样具备强大的硬件和复杂的维护,降低了部署和运营成本。

缺点:1. 学习和开发门槛高:与传统关系型数据库相比,NoSQL数据库的学习和开发有一定难度。

需要学习新的查询语言或API,并掌握不同数据模型的操作方式。

2. 缺乏标准化和统一性:目前市面上存在多种不同类型的NoSQL数据库产品,缺乏统一的标准和规范。

这使得不同NoSQL数据库之间的兼容性和迁移性较差。

3. 弱一致性的局限:虽然NoSQL数据库的最终一致性在很多情况下是足够的,但在某些特定场景下,如银行系统等,强一致性仍然是必要条件。

4. 查询效率相对较低:尽管NoSQL数据库在读写性能方面具有优势,但由于其灵活的数据模型,查询效率相对较低。

对于复杂查询和跨表查询,需要设计适当的索引才能提高查询效率。

5. 数据一致性问题:NoSQL数据库的数据复制和同步往往需要一定的时间,可能导致数据之间的不一致,对于需要即时一致性的系统应用来说,这是一个潜在的问题。

常见的nosql数据库有哪些?以及他们的特点与区别?

常见的nosql数据库有哪些?以及他们的特点与区别?

常见的nosql数据库有哪些?以及他们的特点与区别?⼀、常见的nosql⼆、Redis,Memcache,MongoDb的特点1.Redis 优点: 1.⽀持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算) 2.⽀持持久化操作,可以进⾏aof及rdb数据持久化到磁盘,从⽽进⾏数据备份或数据恢复等操作,较好的防⽌数据丢失 的⼿段。

3.⽀持通过Replication进⾏数据复制,通过master-slave机制,可以实时进⾏数据的同步复制,⽀持多级复制和增量复制,master-slave机制是Redis进⾏HA的重要⼿段。

4.单线程请求,所有命令串⾏执⾏,并发情况下不需要考虑数据⼀致性问题。

5.⽀持pub/sub消息订阅机制,可以⽤来进⾏消息订阅与通知。

6.⽀持简单的事务需求,但业界使⽤场景很少,并不成熟。

缺点: 1.Redis只能使⽤单线程,性能受限于CPU性能,故单实例CPU最⾼才可能达到5-6wQPS每秒(取决于数据结构,数据⼤⼩以及服务器硬件性能,⽇常环境中QPS⾼峰⼤约在1-2w左右)。

2.⽀持简单的事务需求,但业界使⽤场景很少,并不成熟,既是优点也是缺点。

3.Redis在string类型上会消耗较多内存,可以使⽤dict(hash表)压缩存储以降低内存耗⽤。

2.Memcache 优点: 1.Memcached可以利⽤多核优势,单实例吞吐量极⾼,可以达到⼏⼗万QPS(取决于key、value的字节⼤⼩以及服务器硬件性能,⽇常环境中QPS⾼峰⼤约在4-6w左右)。

适⽤于最⼤程度扛量。

2.⽀持直接配置为session handle。

缺点: 1只⽀持简单的key/value数据结构,不像Redis可以⽀持丰富的数据类型。

2.⽆法进⾏持久化,数据不能备份,只能⽤于缓存使⽤,且重启后数据全部丢失。

NoSQL的4种存储数据库详解

NoSQL的4种存储数据库详解

高性能
由于文档型存储数据库通 常采用轻量级的数据交换 格式和高效的索引机制, 因此具有较高的读写性能 。
典型文档型存储数据库:MongoDB
MongoDB简介
MongoDB是一个基于分布式文件存储的开源文档型数据库,使用C 编写,提供了丰富的查询和数据操作功能。
面向文档的存储
MongoDB以BSON(Binary JSON)格式存储数据,支持嵌套文档 和数组,能够表达复杂的数据结构。
高效压缩
由于同一列的数据类型相同,因此可以采用更加高效的压 缩算法,从而减少存储空间占用。
适用于分析型应用
列式存储数据库非常适合用于数据仓库、数据挖掘等分析 型应用,因为这些应用通常需要处理大量的数据,并且查 询涉及的数据列相对较少。
典型列式存储数据库:HBase
概述
分布式
稀疏性
强一致性
集成Hadoop
强大的查询语言
MongoDB提供了丰富的查询操作符和聚合管道,支持复杂的数据查 询和分析。
高可用性和扩展性
MongoDB支持分布式部署和自动分片,能够实现数据的水平扩展和 高可用性。
应用场景与案例分析
日志和事件数据
MongoDB适合存储大量的日志和事 件数据,如用户行为日志、系统操作 日志等。
内容管理和Web应用
多样化数据存储需求增长 随着大数据、物联网等技术的快 速发展,企业对多样化数据存储 的需求不断增长,NoSQL数据库 将继续发挥重要作用。
数据安全与隐私保护 随着数据安全和隐私保护意识的 提高,NoSQL数据库将加强数据 加密、访问控制等安全功能,保 障企业数据安全。
实时数据处理与分析
NoSQL数据库在实时数据处理与 分析方面具有优势,未来将进一 步强化这一功能,满足企业对实 时数据的需求。

关系数据库与NoSQL数据库比较研究

关系数据库与NoSQL数据库比较研究

关系数据库与NoSQL数据库比较研究简介:在当今信息技术大发展的时代,数据的存储和管理变得越来越重要。

关系数据库和NoSQL数据库是两种流行的数据库类型,它们有着各自的特点和优势。

本篇文章将对关系数据库和NoSQL数据库进行比较研究,分析它们的异同点以及在不同场景下的应用。

一、定义和特点1. 关系数据库:关系数据库是一种基于关系模型的数据库,它使用表格和关系来组织和管理数据。

关系数据库采用结构化查询语言(SQL)进行数据操作和查询。

它具备强大的事务支持和严格的数据完整性,适用于处理结构化数据和复杂的关系查询,如金融系统和企业资源计划(ERP)系统等。

2. NoSQL数据库:NoSQL数据库是指非关系型数据库,它不使用传统的表格和关系模型来组织数据。

NoSQL数据库的特点是灵活的数据模型和扩展性,能够处理非结构化和半结构化数据。

NoSQL数据库适用于高可扩展性和高性能的应用场景,如大数据分析和实时数据处理。

二、数据模型1. 关系数据库:关系数据库使用表格(有时称为关系)来组织和存储数据,每个表格由列(属性)和行(记录)组成。

关系数据库的数据模型是严格的,需要事先定义表格结构。

使用SQL语言可以进行复杂的数据查询和关联操作。

2. NoSQL数据库:NoSQL数据库的数据模型可以是键值对、文档、列族或图。

它们没有固定的结构要求,可以根据实际需求灵活设计和存储数据。

NoSQL数据库常用的操作是查找、插入和更新,对于复杂的数据查询可能略有不足。

三、可扩展性和性能1. 关系数据库:关系数据库在处理大量结构化数据和复杂查询时,性能可能受到限制。

尽管关系数据库可以通过水平切分和垂直切分来实现扩展性,但在分布式环境中的数据一致性和并发访问方面可能存在挑战。

2. NoSQL数据库:NoSQL数据库被设计为具有良好的水平扩展性和高性能。

NoSQL数据库可以通过分片来平衡数据负载,并支持高并发访问。

与关系数据库相比,NoSQL数据库在处理大量非结构化数据和简单查询时表现更为出色。

nosql 图形数据库对比

nosql 图形数据库对比

Java开发者调查:最受欢迎的图形数据库在图形理论当中,一幅简单的图形是由一系列节点与边线所构成。

事实上图形类数据库往往会赋予节点与连线更多类别与属性,以使其更具可描述性及实际应用功能。

至少用户希望图形类数据库能够支持快速遍历——这也是大家不会简单地使用像HBase或者Cassandra 这样的表格类数据库存储所有边线的原因(联合运算往往会提高使用成本)。

图形类数据库属于NoSQL数据库四大类型之一,图形存储类产品中也以下列七种较为流行及常用: Neo4J, Infinite Graph, DEX, InfoGrid, HyperGraphDB, Trinity 以及AllegroGraph。

本文以Java程序员的视角出发,与我们共同探讨上述产品的各类细节。

1. Neo4J (Neo Technology出品)Neo4J可能是当下人气最高的图形数据库。

从名称我们就能看出Neo4J在设计上主要考虑到Java应用程序的实际需求,但它同时也支持Python。

Neo4J属于开源项目,共有GPLv3社区版、高级版、企业版三种版本;后两者都以AGPLv3商业许可为基础。

Neo4J中的图形模型如图一所示。

简单来说:·节点与边线可以被赋予属性(键-值对);·只有边线能够与类别相关联,例如“KNOWS”;·边线可以指定为有指向或无指向。

▲图一由于节点名称的存在,如果大家想在图中找到对应节点,那么必须依靠索引。

Neo4J使用以下索引机制:一个超级参考节点通过一条特殊类别的边线“REFERENCE”与所有节点相连。

这实际上允许我们创建多个索引,借以通过不同的边线类别对其加以区分。

索引结构如图二所示。

▲图二Neo4J还提供了一些特殊功能,例如列出特定节点的相邻诸节点或是两节点间长度最短的诸类路径等。

请注意,要使用上述各类“遍历”功能,Neo4J要求大家指定路径中经过的边线类别,其实这一点并不麻烦。

非关系型数据库(nosql)

非关系型数据库(nosql)

⾮关系型数据库(nosql)1、⾮关系型数据库(nosql)区别:mongodb数据存在磁盘上,redis和memcache数据不存在磁盘,存在内存⾥。

特点:模式⾃由:不需要定义表结构,数据表中的每条记录都可能有不同的属性和格式。

逆规范化:不遵循范式要求,去掉完整性约束,减少表之间的依赖。

弹性可扩展:可在系统运⾏的过程中,动态的删除和增加节点。

多副本异步复制:数据快速写⼊⼀个节点,其余节点通过读取写⼊的⽇志来实现异步复制。

弱事务:不能完全满⾜事务的ACID特性,但是可以保证事务的最终⼀致性。

什么时候使⽤nosql类型数据库?数据库表schema经常变化;数据库表字段是复杂数据类型;⾼并发数据库请求;海量数据的分布式存储。

mongodb:概念:集合==表⽂档==数据键值对:{"name":"酸酸","sex":"⼥","age":"25"}命令关键词:show dbs; #查看数据库show collectios; #查看集合(表)create collection #创建⼀个集合use #切换数据库insert #插⼊数据find #查找数据update #修改数据remove #删除数据use 数据库名; #切换数据库,如果不存在即新建⼀个数据库(use关键字创建数据库)db; #查看当前的数据库db.dropDatabase(); #删除数据库创建数据:⽤insert关键字来插⼊数据,db.collectios.insert(doc);同⼀张表⾥的数据可以不⼀样,如果插⼊数据的时候表不存在,执⾏插⼊语句会⾃动创建表①.直接执⾏insert语句db.集合名.insert({"列名1":"值1","列名2":值2,"列名3":["值3a","值3b","值3c","值3d","值3e"],"列名4":"值4"});②.通过定义变量的⽅式变量名={"列名1":"值1","列名2":值2,"列名3":["值3a","值3b","值3c","值3d","值3e"],"列名4":"值4"});db.集合名.insert(变量名);更新数据:⽤update关键字来更新数据,db.collectios.update({条件},{更新的值})同⼀张表⾥的数据可以不⼀样,如果更新数据的值不存在,插⼊⼀条语句①.所有字段加全,否则会影响其他字段数据db.集合名.update({"列名1":"值1","列名2":值2,"列名3":["值3a","值3b","值3c","值3d","值3e"],"列名4":"值4"});②.$set⽅式只更新指定的字段db.集合名.update({"条件列名1":"条件值"},{$set:{"修改列名":"修改值"}});③.$inc,在原来的值上增加值,只适⽤于数字型db.集合名.update({"条件列名1":"条件值"},{$inc:{"修改列名":20}});删除数据:⽤remove关键字来删除数据,db.collectios.remove();①.删除整个集合⾥的数据db.集合名.remove();②.删除指定的数据,多条匹配删除多条db.集合名.remove({"条件列名1":"条件值1","条件列名2":"条件值2"});③.删除指定数据的前n条,多条匹配删除多条db.集合名.remove({"条件列名1":"条件值1","条件列名2":"条件值2"},n);查询数据:⽤find关键字来查询数据,db.collectios.find();①.查询所有的数据db.集合名.find();②.格式化显⽰数据db.集合名.find().pretty();③.指定条件查询db.集合名.find({"条件列名1":"条件值1"});④.and操作db.集合名.find({"条件列名1":"条件值1","条件列名2":"条件值2"});⑤.or操作db.集合名.find({$or:[{"条件列名1":"条件值1"},{"条件列名2":"条件值2"}]});⑥.and和or合⽤db.集合名.find({"条件列名1":"条件值1"},$or:[{"条件列名2":"条件值2"},{"条件列名3":"条件值3"}]);⑦.查询所有的⾏数db.集合名.find().count();⑧.排序,1是升序,-1是降序db.集合名.find().sort("条件列名":1);条件表达式:等于 {"列名":"值"}⼩于 {"列名":{$lt:"值"}}⼩于或等于 {"列名":{$lte:"值"}}⼤于 {"列名":{$gt:"值"}}⼤于或等于 {"列名":{$gte:"值"}}不等于 {"列名":{$ne:"值"}}Profile(慢查询):记录执⾏时间超过多久的语句profile级别有三种:0:不开启1:记录慢命令,默认为⼤于100ms2:记录所有命令db.getProfilingLevel(); #获取当前profile级别db.setProfilingLevel(); #设置当前profile级别举例:db.setProfilingLevel(1,2000); #记录超过2s查询profile(慢查询)记录:db.system.profile.find();ts:该命令在何时执⾏op: 操作类型query: 本命令的详细信息responseLength: 返回结果集的⼤⼩ntoreturn: 本次查询实际返回的结果集millis: 该命令执⾏耗时,以毫秒记索引:创建索引①.单列索引db.集合名.ensureIndex({"列名":1});②.多列索引db.集合名.ensureIndex({"列名1":1,"列名2":1});③.唯⼀索引db.集合名.ensureIndex({"列名":1},{"unique":true});查看索引①.查看索引db.system.indexes.find();②.查看当前集合中的索引db.集合名.getIndexes();删除索引:⽤dropIdenx来删除索引①.删除指定索引db.集合名.dropIndex({"列名1":1});②.删除所有的索引er.dropIndexes();explain:解析查询语句db.collection.find({"列名":"值"}).explain();explain说明:cursor: 返回游标类型(BasicCursor 或 BtreeCursor)nscanned: 被扫描的⽂档数量n: 返回的⽂档数量millis: 耗时(毫秒)indexBounds: 所使⽤的索引,如果这个字段没有的话,代表没有使⽤索引isMultiKey:是否使⽤了多键索引scanAndOrder:是否在内存中对结果集进⾏了排序indexOnly:是否只使⽤索引就能完成查询(覆盖索引)redisredis-server #启动redisredis-cli #进⼊redis命令⾏增删改查:select 1 #⽤select关键字,选择第⼀个数据库set 键值 #⽤set关键字,插⼊数据set 键值 EX 失效时间 #设置失效时间(单位:s)get 键 #⽤get关键字,获取数据del 键 #⽤del关键字,删除数据hset 键字段 '值' #hash类型,添加hash类型数据hget 键字段 #hash类型,获取hash类型单⼦字段数据hgetall 键 #获取hash类型⾥所有字段值hdel 键字段 #删除指定的某个字段keys * #查看当前数据库有哪些keyinfo #查看redis当前系统信息(监控)memcache启动参数:-p #监听的端⼝-c #最⼤同时连接数,默认是1024-m #最⼤内存使⽤,单位MB。

NoSQL数据库的优势与劣势对比及使用场景介绍

NoSQL数据库的优势与劣势对比及使用场景介绍

NoSQL数据库的优势与劣势对比及使用场景介绍引言:随着大数据时代的到来,传统的关系型数据库在处理海量数据时面临诸多挑战。

为了克服这些挑战,NoSQL数据库应运而生。

NoSQL(Not Only SQL)是指非关系型数据库,它以分布式、高扩展性和灵活性为特点,适合处理大规模的非结构化数据。

本文将对NoSQL数据库的优势与劣势展开讨论,并介绍了一些常见的NoSQL数据库的使用场景。

一、优势对比:1. 分布式架构:NoSQL数据库采用分布式架构,可以将数据存储在多个节点上,实现数据的水平扩展。

这意味着NoSQL数据库可以无限地扩展,以应对海量数据的处理需求。

而传统的关系型数据库通常采用单一服务器架构,容易成为性能瓶颈。

2. 灵活的数据模型:传统的关系型数据库需要事先定义表的结构,且表结构一旦定义就不易改变。

而NoSQL数据库不需要固定的模式,可以根据数据的特点自由定义数据模型。

这种灵活性使得NoSQL数据库适合存储非结构化和半结构化数据。

3. 高性能:由于在数据模型的设计上没有规定多重分组、关联和完整性约束等复杂操作,NoSQL数据库在读写性能上通常优于关系型数据库。

它们通常采用的键值对存储方式,能够快速的查找和插入数据。

4. 高可用性:NoSQL数据库采用分布式架构,数据复制和数据冗余是其一个重要特点。

即使某个节点或数据中心出现故障,系统仍然可以继续运行。

与之相比,传统的关系型数据库在出现故障时需要进行手动恢复,容易引发停机和数据丢失。

二、劣势对比:1. 数据一致性:NoSQL数据库在追求高性能和高可用性的同时,牺牲了数据的一致性。

由于分布式系统中的各个节点之间具有异步复制和数据同步的延迟,数据之间的一致性难以保证。

对于强一致性要求较高的应用场景,NoSQL数据库可能不适合。

2. 缺乏成熟的标准:由于NoSQL数据库种类繁多,缺乏统一的标准和规范,导致各种NoSQL数据库之间的技术互操作性差。

这给开发人员带来了一定的学习和部署成本。

分布式数据库与NoSQL数据库的比较(系列八)

分布式数据库与NoSQL数据库的比较(系列八)

分布式数据库与NoSQL数据库的比较随着互联网的迅速发展,数据量的不断增加以及用户对数据的实时性和可扩展性的要求越来越高,传统的关系型数据库面临诸多挑战。

在此背景下,分布式数据库和NoSQL数据库应运而生。

本文将就分布式数据库和NoSQL数据库的特点、适用场景以及优缺点进行比较。

一、分布式数据库的特点与优势分布式数据库是指将数据按照一定的规则分散存储在不同的物理节点上,并通过协同工作的方式提供数据服务的系统。

相比传统的关系型数据库,分布式数据库具有以下几个特点和优势:1. 高可扩展性:分布式数据库可以通过添加节点来扩展数据存储容量和提升数据处理性能,能够应对海量数据的存储和处理需求。

2. 高可用性:分布式数据库采用多节点冗余存储的方式,即使某一节点发生故障,也不会造成整个系统的瘫痪,数据依然可以正常访问。

3. 高性能:分布式数据库通过数据分片和并行处理的方式提高查询和事务处理的性能,有效降低了系统的响应时间和负载。

二、NoSQL数据库的特点与优势NoSQL数据库是指非关系型数据库,主要用于处理大规模分散的数据,具有以下几个特点和优势:1. 高可伸缩性:NoSQL数据库采用分布式存储和处理的方式,能够方便地水平扩展,应对大规模数据的存储和处理需求。

2. 灵活的数据模型:NoSQL数据库不遵循传统的关系模型,可以灵活地存储和查询非结构化、半结构化和结构化的数据,更适合于应对快速变化的业务需求。

3. 高性能和低延迟:NoSQL数据库采用分布式架构和缓存技术,具有较低的读写延迟和较高的吞吐量,能够实现快速的数据访问和处理。

三、分布式数据库与NoSQL数据库的比较下面将分布式数据库和NoSQL数据库在几个方面进行比较,以帮助我们更好地选择适合的数据库解决方案。

1. 数据模型分布式数据库通常采用关系模型,数据以表的形式存储,支持SQL查询和ACID事务。

而NoSQL数据库可以采用键值对、文档、列族和图形等不同的数据模型,更加灵活。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2011/08/30 | 分类:工具与资源, 程序员| 4 条评论| 标签:NOSQL, 数据库分享到:38导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型nosql 数据库的文章。

文章由敏捷翻译–唐尤华编译。

如需转载,请参见文后声明。

虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破。

这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举。

但是NoSQL数据库之间的不同,远超过两SQL数据库之间的差别。

这意味着软件架构师更应该在项目开始时就选择好一个适合的NoSQL数据库。

针对这种情况,这里对Cassandra、Mongodb、CouchDB、Redis、Riak、Membase、Neo4j和HBase进行了比较:(编注1:NoSQL:是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储。

现今的计算机体系结构在数据存储方面要求具备庞大的水平扩展性,而NoSQL致力于改变这一现状。

目前Google的BigTable 和Amazon 的Dynamo使用的就是NoSQL型数据库。

参见NoSQL词条。

)1. CouchDB∙所用语言:Erlang∙特点:DB一致性,易于使用∙使用许可:Apache∙协议:HTTP/REST∙双向数据复制,∙持续进行或临时处理,∙处理时带冲突检查,∙因此,采用的是master-master复制(见编注2)∙MVCC –写操作不阻塞读操作∙可保存文件之前的版本∙Crash-only(可靠的)设计∙需要不时地进行数据压缩∙视图:嵌入式映射/减少∙格式化视图:列表显示∙支持进行服务器端文档验证∙支持认证∙根据变化实时更新∙支持附件处理∙因此,CouchApps(独立的js应用程序)∙需要jQuery程序库最佳应用场景:适用于数据变化较少,执行预定义查询,进行数据统计的应用程序。

适用于需要提供数据版本支持的应用程序。

例如:CRM、CMS系统。

master-master复制对于多站点部署是非常有用的。

(编注2:master-master复制:是一种数据库同步方法,允许数据在一组计算机之间共享数据,并且可以通过小组中任意成员在组内进行数据更新。

)2. Redis∙所用语言:C/C++∙特点:运行异常快∙使用许可:BSD∙协议:类Telnet∙有硬盘存储支持的内存数据库,∙但自2.0版本以后可以将数据交换到硬盘(注意,2.4以后版本不支持该特性!)∙Master-slave复制(见编注3)∙虽然采用简单数据或以键值索引的哈希表,但也支持复杂操作,例如ZREVRANGEBYSCORE。

∙INCR & co (适合计算极限值或统计数据)∙支持sets(同时也支持union/diff/inter)∙支持列表(同时也支持队列;阻塞式pop操作)∙支持哈希表(带有多个域的对象)∙支持排序sets(高得分表,适用于范围查询)∙Redis支持事务∙支持将数据设置成过期数据(类似快速缓冲区设计)∙Pub/Sub允许用户实现消息机制最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。

例如:股票价格、数据分析、实时数据搜集、实时通讯。

(编注3:Master-slave复制:如果同一时刻只有一台服务器处理所有的复制请求,这被称为Master-slave复制,通常应用在需要提供高可用性的服务器集群。

)3. MongoDB∙所用语言:C++∙特点:保留了SQL一些友好的特性(查询,索引)。

∙使用许可:AGPL(发起者:Apache)∙协议:Custom, binary(BSON)∙Master/slave复制(支持自动错误恢复,使用sets 复制)∙内建分片机制∙支持javascript表达式查询∙可在服务器端执行任意的javascript函数∙update-in-place支持比CouchDB更好∙在数据存储时采用内存到文件映射∙对性能的关注超过对功能的要求∙建议最好打开日志功能(参数–journal)∙在32位操作系统上,数据库大小限制在约2.5Gb∙空数据库大约占192Mb∙采用GridFS存储大数据或元数据(不是真正的文件系统)最佳应用场景:适用于需要动态查询支持;需要使用索引而不是map/reduce功能;需要对大数据库有性能要求;需要使用CouchDB但因为数据改变太频繁而占满内存的应用程序。

例如:你本打算采用MySQL或PostgreSQL,但因为它们本身自带的预定义栏让你望而却步。

4. Riak∙所用语言:Erlang和C,以及一些Javascript∙特点:具备容错能力∙使用许可:Apache∙协议:HTTP/REST或者custom binary∙可调节的分发及复制(N, R, W)∙用JavaScript or Erlang在操作前或操作后进行验证和安全支持。

∙使用JavaScript或Erlang进行Map/reduce∙连接及连接遍历:可作为图形数据库使用∙索引:输入元数据进行搜索(1.0版本即将支持)∙大数据对象支持(Luwak)∙提供“开源”和“企业”两个版本∙全文本搜索,索引,通过Riak搜索服务器查询(beta版)∙支持Masterless多站点复制及商业许可的SNMP监控最佳应用场景:适用于想使用类似Cassandra(类似Dynamo)数据库但无法处理bloat及复杂性的情况。

适用于你打算做多站点复制,但又需要对单个站点的扩展性,可用性及出错处理有要求的情况。

例如:销售数据搜集,工厂控制系统;对宕机时间有严格要求;可以作为易于更新的web服务器使用。

5. Membase∙所用语言:Erlang和C∙特点:兼容Memcache,但同时兼具持久化和支持集群∙使用许可:Apache 2.0∙协议:分布式缓存及扩展∙非常快速(200k+/秒),通过键值索引数据∙可持久化存储到硬盘∙所有节点都是唯一的(master-master复制)∙在内存中同样支持类似分布式缓存的缓存单元∙写数据时通过去除重复数据来减少IO∙提供非常好的集群管理web界面∙更新软件时软无需停止数据库服务∙支持连接池和多路复用的连接代理最佳应用场景:适用于需要低延迟数据访问,高并发支持以及高可用性的应用程序例如:低延迟数据访问比如以广告为目标的应用,高并发的web 应用比如网络游戏(例如Zynga)6. Neo4j∙所用语言:Java∙特点:基于关系的图形数据库∙使用许可:GPL,其中一些特性使用AGPL/商业许可∙协议:HTTP/REST(或嵌入在Java中)∙可独立使用或嵌入到Java应用程序∙图形的节点和边都可以带有元数据∙很好的自带web管理功能∙使用多种算法支持路径搜索∙使用键值和关系进行索引∙为读操作进行优化∙支持事务(用Java api)∙使用Gremlin图形遍历语言∙支持Groovy脚本∙支持在线备份,高级监控及高可靠性支持使用AGPL/商业许可最佳应用场景:适用于图形一类数据。

这是Neo4j与其他nosql数据库的最显著区别例如:社会关系,公共交通网络,地图及网络拓谱7. Cassandra∙所用语言:Java∙特点:对大型表格和Dynamo支持得最好∙使用许可:Apache∙协议:Custom, binary (节约型)∙可调节的分发及复制(N, R, W)∙支持以某个范围的键值通过列查询∙类似大表格的功能:列,某个特性的列集合∙写操作比读操作更快∙基于Apache分布式平台尽可能地Map/reduce∙我承认对Cassandra有偏见,一部分是因为它本身的臃肿和复杂性,也因为Java的问题(配置,出现异常,等等)最佳应用场景:当使用写操作多过读操作(记录日志)如果每个系统组建都必须用Java编写(没有人因为选用Apache的软件被解雇)例如:银行业,金融业(虽然对于金融交易不是必须的,但这些产业对数据库的要求会比它们更大)写比读更快,所以一个自然的特性就是实时数据分析8. HBase(配合ghshephard使用)∙所用语言:Java∙特点:支持数十亿行X上百万列∙使用许可:Apache∙协议:HTTP/REST (支持Thrift,见编注4)∙在BigTable之后建模∙采用分布式架构Map/reduce∙对实时查询进行优化∙高性能Thrift网关∙通过在server端扫描及过滤实现对查询操作预判∙支持XML, Protobuf, 和binary的HTTP∙Cascading, hive, and pig source and sink modules∙基于Jruby(JIRB)的shell∙对配置改变和较小的升级都会重新回滚∙不会出现单点故障∙堪比MySQL的随机访问性能最佳应用场景:适用于偏好BigTable:)并且需要对大数据进行随机、实时访问的场合。

例如:Facebook消息数据库(更多通用的用例即将出现)编注4:Thrift 是一种接口定义语言,为多种其他语言提供定义和创建服务,由Facebook开发并开源。

当然,所有的系统都不只具有上面列出的这些特性。

这里我仅仅根据自己的观点列出一些我认为的重要特性。

与此同时,技术进步是飞速的,所以上述的内容肯定需要不断更新。

我会尽我所能地更新这个列表。

相关文档
最新文档