您当前的位置:首页 > 互联网教程

nosql数据库有哪些

发布时间:2025-05-24 19:54:05    发布人:远客网络

nosql数据库有哪些

一、nosql数据库有哪些

因此,采用的是master-master复制(见编注2)

因此, CouchApps(独立的 js应用程序)

最佳应用场景:适用于数据变化较少,执行预定义查询,进行数据统计的应用程序。适用于需要提供数据版本支持的应用程序。

例如: CRM、CMS系统。 master-master复制对于多站点部署是非常有用的。

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

但自2.0版本以后可以将数据交换到硬盘(注意, 2.4以后版本不支持该特性!)

虽然采用简单数据或以键值索引的哈希表,但也支持复杂操作,例如 ZREVRANGEBYSCORE。

INCR& co(适合计算极限值或统计数据)

支持 sets(同时也支持 union/diff/inter)

支持列表(同时也支持队列;阻塞式 pop操作)

支持哈希表(带有多个域的对象)

支持排序 sets(高得分表,适用于范围查询)

支持将数据设置成过期数据(类似快速缓冲区设计)

最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。

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

(编注3:Master-slave复制:如果同一时刻只有一台服务器处理所有的复制请求,这被称为

Master-slave复制,通常应用在需要提供高可用性的服务器集群。)

特点:保留了SQL一些友好的特性(查询,索引)。

使用许可: AGPL(发起者: Apache)

协议: Custom, binary( BSON)

Master/slave复制(支持自动错误恢复,使用 sets复制)

可在服务器端执行任意的 javascript函数

update-in-place支持比CouchDB更好

在数据存储时采用内存到文件映射

建议最好打开日志功能(参数–journal)

在32位操作系统上,数据库大小限制在约2.5Gb

采用 GridFS存储大数据或元数据(不是真正的文件系统)

最佳应用场景:适用于需要动态查询支持;需要使用索引而不是 map/reduce功能;需要对大数据库有性能要求;需要使用

CouchDB但因为数据改变太频繁而占满内存的应用程序。

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

所用语言:Erlang和C,以及一些Javascript

协议: HTTP/REST或者 custom binary

用 JavaScript or Erlang在操作前或操作后进行验证和安全支持。

使用JavaScript或Erlang进行 Map/reduce

连接及连接遍历:可作为图形数据库使用

索引:输入元数据进行搜索(1.0版本即将支持)

提供“开源”和“企业”两个版本

全文本搜索,索引,通过 Riak搜索服务器查询( beta版)

支持Masterless多站点复制及商业许可的 SNMP监控

最佳应用场景:适用于想使用类似 Cassandra(类似Dynamo)数据库但无法处理

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

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

特点:兼容 Memcache,但同时兼具持久化和支持集群

非常快速(200k+/秒),通过键值索引数据

所有节点都是唯一的( master-master复制)

在内存中同样支持类似分布式缓存的缓存单元

写数据时通过去除重复数据来减少 IO

更新软件时软无需停止数据库服务

支持连接池和多路复用的连接代理

最佳应用场景:适用于需要低延迟数据访问,高并发支持以及高可用性的应用程序

例如:低延迟数据访问比如以广告为目标的应用,高并发的 web应用比如网络游戏(例如 Zynga)

使用许可: GPL,其中一些特性使用 AGPL/商业许可

协议: HTTP/REST(或嵌入在 Java中)

可独立使用或嵌入到 Java应用程序

图形的节点和边都可以带有元数据

支持在线备份,高级监控及高可靠性支持使用 AGPL/商业许可

最佳应用场景:适用于图形一类数据。这是 Neo4j与其他nosql数据库的最显著区别

例如:社会关系,公共交通网络,地图及网络拓谱

特点:对大型表格和 Dynamo支持得最好

支持以某个范围的键值通过列查询

类似大表格的功能:列,某个特性的列集合

基于 Apache分布式平台尽可能地 Map/reduce

我承认对 Cassandra有偏见,一部分是因为它本身的臃肿和复杂性,也因为 Java的问题(配置,出现异常,等等)

最佳应用场景:当使用写操作多过读操作(记录日志)如果每个系统组建都必须用 Java编写(没有人因为选用

例如:银行业,金融业(虽然对于金融交易不是必须的,但这些产业对数据库的要求会比它们更大)写比读更快,所以一个自然的特性就是实时数据分析

协议:HTTP/REST(支持 Thrift,见编注4)

通过在server端扫描及过滤实现对查询操作预判

支持 XML, Protobuf,和binary的HTTP

Cascading, hive, and pig source and sink modules

对配置改变和较小的升级都会重新回滚

最佳应用场景:适用于偏好BigTable:)并且需要对大数据进行随机、实时访问的场合。

例如: Facebook消息数据库(更多通用的用例即将出现)

是一种接口定义语言,为多种其他语言提供定义和创建服务,由Facebook开发并开源。

当然,所有的系统都不只具有上面列出的这些特性。这里我仅仅根据自己的观点列出一些我认为的重要特性。与此同时,技术进步是飞速的,所以上述的内容肯定需要不断更新。我会尽我所能地更新这个列表。

二、如何选择NoSQL数据库

NoSQL,指的是非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的

SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。

),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数

据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

从这一新兴技术中选择一款正确的NoSQL数据库是非常具有挑战性的。比一下网建议在选择时考虑以下因素:

发控制指的是当多个用户同时更新运行时,用于保护数据库完整性的各种技术。并发机制不正确可能导致脏读、幻读和不可重复读等此类问题。并发控制的目的是保

证一个用户的工作不会对另一个用户的工作产生不合理的影响。在某些情况下,这些措施保证了当用户和其他用户一起操作时,所得的结果和她单独操作时的结果是

一样的。在另一些情况下,这表示用户的工作按预定的方式受其他用户的影响。

就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。

封锁是一次只允许一个用户读取或修改的一种机制,是实现并发控制的一个非常重要的技术。

Multi-Version Concurrency Control多版本并发控制,维持一个数据的多个版本使读写操作没有冲突。MVCC优化了数据库并发系统,使系统在有大量并发用户时得到最高的性能,并且可以不用关闭服务器就直接进行热备份。

数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久

性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有这四种特性,否则在事务过程(Transaction

processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。

数据库镜像是DBMS根据DBA的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上,每当主数据库更新时,DBMS会自动把更新后的数据复制过去,即DBMS自动保证镜像数据与主数据的一致性。

指的是数据的物理特性怎样被存储在数据库中。

磁盘数据被存储在硬盘驱动器里;

GFS或谷歌文件系统是一个由谷歌开发的专有的分布式文件系统;

Hadoop是Apache软件框架,免费许可下支持数据密集型分布式应用程序;

Amazon S3通过Web服务接口提供存储;

全称是“Berkeley DB”,它是MySQL具有事务能力的表类型,由Sleepycat

Software开发。BDB表类型提供了MySQL用户长久期盼的功能,即事务控制能力。在任何RDBMS中,事务控制能力都是一种极其重要和宝贵的功

能。事务控制能力使得我们能够确保一组命令确实已经全部执行成功,或者确保当任何一个命令出现错误时所有命令的执行结果均被退回。

实现语言会影响数据库的发展速度。典型的NoSQL数据库是用低级语言如C/ C++编写的。另一方面,那些更高层次的语言如Java,使自定义更容易。

实现语言有:C, C++, Erlang, Java, Python

考虑下列哪一个特点对你的数据库是最重要的:

下面这些许可证是一个不同的开放源码许可的形式:

IDPL:最初的开发者的公共许可证

存储类型是NoSQL数据库最大的不同,是决定使用哪款数据库的一个首要指标。

关键字:支持get、put和删除操作

按列存储:相对于传统的按行存储,数据集成容易多了

面向文件系统:存储像是JSON或XML这样的结构化文件,很容易就能从面向对象软件中获取数据。

三、NoSQL 数据库在win平台上有多少

NoSQL太火,冒出太多产品了,保守估计也成百上千了。

互联网公司常用的基本集中在以下几种,每种只举一个比较常见或者应用比较成功的例子吧。

in memory key-value store,同时提供了更加丰富的数据结构和运算的能力,成功用法是替代memcached,通过checkpoint和commit log提供了快速的宕机恢复,同时支持replication提供读可扩展和高可用。

2. Disk-Based KV Store: Leveldb

真正基于磁盘的key-value storage,模型单一简单,数据量不受限于内存大小,数据落盘高可靠,Google的几位大神出品的精品,LSM模型天然写优化,顺序写盘的方式对于新硬件ssd再适合不过了,不足是仅提供了一个库,需要自己封装server端。

分布式nosql,具备了区别mysql的最大亮点:可扩展性。mongodb最新引人的莫过于提供了sql接口,是目前nosql里最像mysql的,只是没有ACID的特性,发展很快,支持了索引等特性,上手容易,对于数据量远超内存限制的场景来说,还需要慎重。

这个富二代似乎不用赘述了,最大的优势是开源,对于普通的scan和基于行的get等基本查询,性能完全不是问题,只是只提供裸的api,易用性上是短板,可扩展性方面是最强的,其次坐上了Hadoop的快车,社区发展很快,各种基于其上的开源产品不少,来解决诸如join、聚集运算等复杂查询。