nosql和mysql,为什么使用NoSQL
NoSQL和MySQL的区别大吗?
即非关系型数据库和关系型数据库。
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、成都微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了柞水免费建站欢迎大家使用!
MySQL的优点:事务处理—保持数据的一致性;由于以标准化为前提,数据更新的开销很小(相同的字段基本上只有一处);可以进行Join等复杂查询
NoSQL的优点:首先它是基于内存的,也就是数据放在内存中,而不是像数据库那样把数据放在磁盘上,而内存的读取速度是磁盘读取速度的几十倍到上百倍,所以NoSQL工具的速度远比数据库读取速度要快得多,满足了高响应的要求。即使NoSQL将数据放在磁盘中,它也是一种半结构化的数据 格式,读取到解析的复杂度远比MySQL要简单,这是因为MySQL存储的是经过结构化、多范式等有复杂规则的数据,还原为内存结构的速度较慢。NoSQL在很大程度上满足了高并发、快速读/和响应的要求,所以它也是Java互联网系统的利器。
简单的扩展:典型例子是Cassandra,由于其架构是类似于经典的P2P,所以能通过轻松地添加新的节点来扩展这个集群;
低廉的成本:这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的License成本;
NoSQL的缺点:大多数NoSQL数据库都不支持事务,也不像 SQL Server和Oracle那样能提供各种附加功能,比如BI和报表等; 不提供对SQL的支持
那么该如何选择?
如果规模和性能比24小时的数据一致性更重要,那NoSQL是一个理想的选择 (NoSQL依赖于BASE模型——基本可用、软状态、最终一致性)。
但如果要保证到“始终一致”,尤其是对于机密信息和财务信息,那么MySQL很可能是最优的选择(MySQL依赖于ACID模型——原子性、一致性、独立性和耐久性)。
如果关系数据库在你的应用场景中,完全能够很好的工作,而你又是非常善于使用和维护关系数据库的,那么我觉得你完全没有必要迁移到NoSQL上面,除非你是个喜欢折腾的人。如果你是在金融,电信等以数据为王的关键领域,目前使用的是Oracle数据库来提供高可靠性的,除非遇到特别大的瓶颈,不然也别贸然尝试NoSQL。
然而,在WEB2.0的网站中,关系数据库大部分都出现了瓶颈。在磁盘IO、数据库可扩展上都花费了开发人员相当多的精力来优化,比如做分表分库(database sharding)、主从复制、异构复制等等,然而,这些工作需要的技术能力越来越高,也越来越具有挑战性。如果你正在经历这些场合,那么我觉得你应该尝试一下NoSQL了。
具体问题具体分析
MySQL体积小、速度快、成本低、结构稳定、便于查询,可以保证数据的一致性,但缺乏灵活性。
NoSQL高性能、高扩展、高可用,不用局限于固定的结构,减少了时间和空间上的开销,却又很难保证数据一致性。
————————————————
版权声明:本文为CSDN博主「蒟蒻熊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
Mongodb和mysql的区别
Mongodb和mysql的区别
1.Mongodb简介及优缺点分析
Mongodb是非关系型数据库(nosql ),属于文档型数据库。文档是mongoDB中数据的基本单元,类似关系数据库的行,多个键值对有序地放置在一起便是文档,语法有点类似javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。
存储方式:虚拟内存+持久化。
查询语句:是独特的Mongodb的查询方式。
适合场景:事件的记录,内容管理或者博客平台等等。
架构特点:可以通过副本集,以及分片来实现高可用。
数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。
成熟度与广泛度:新兴数据库,成熟度较低,Nosql数据库中最为接近关系型数据库,比较完善的DB之一,适用人群不断在增长。
优点:
快速!在适量级的内存的Mongodb的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。高扩展性,存储的数据格式是json格式!
缺点:
① mongodb不支持事务操作。
② mongodb占用空间过大。
③ 开发文档不是很完全,完善。
2.MySQL优缺点分析
优点:
在不同的引擎上有不同 的存储方式。
查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。
开源数据库的份额在不断增加,mysql的份额页在持续增长。
缺点:
在海量数据处理的时候效率会显著变慢。
3.Mongodb和MySQL数据库的对比
传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。
MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。
4.MongoDB常用语句
# 连接Mongo数据库,并设置数据存储地址
mongod.exe --dbpath "d:softwareMongoDBServer3.0data"
#-----------------------#1# 数据库
# 查看所有的数据库
show dbs
# 删除当前使用的数据库
db.dropDatabase()
# 使用这个数据库(只有插入数据后完成创建数据库)
use dbt
# 查看当前使用的数据库
db
db.getName()
# 查看当前数据库状态
db.stats()
# 修复当前数据库
db.repairDatabase()
# 从一个数据库复制到另一个数据库
db.copyDatabase("mydb", "temp", "127.0.0.1");
#-----------------------#2# 集合
# 查看当前数据库下所有的集合
show collections
show tables
# 创建名称为coll集合
db.createCollection('coll')
db.createCollection("coll2", {capped:true, autoIndexId:true, size:6142800, max:10000}) # 可选参数
# 查看当前集合状态
db.coll.stats()
# 删除名称为coll集合
db.coll.drop()
#-----------------------#3# 集合数据
# 插入空数据并且直接创建名称为coll集合
db.coll.insert({})
# 插入一个或多个数据
db.coll.insert({name:'tom', age:22})
db.coll.insert([{name:'adam', age:10},{name:'john', age:23}])
# 添加数据(save方法可以修改相同id的数据)
db.coll.save({name:'allen'})
# 删除一个或所有的数据
db.coll.remove({name:'tom'})
db.coll.remove({})
# 删除符合条件的数据中的第一条
db.coll.remove({name:'tom'}, 1)
# 更改数据
db.coll.update({name:'tom', age:22}, {$set:{name:'tom', age:222}})
# 查看数据
db.coll.find()
# 查看一条数据
db.coll.findOne()
db.coll.find({}, {name:1, '_id':0}) # 1表示显示,0表示不显示(find默认显示_id)
# 格式化显示数据,使数据更加清晰明了
db.coll.find().pretty()
# 使用and,or查看数据
db.coll.find({name:'tom', age:22}) # 等同and使用
db.coll.find({$or:[{name:'tom'}, {age:21}]}) # or使用
# 操作符大于,小于,等于,不等于,大于不等于,小于不等于
db.coll.find({age: {$gt: 22}}) # 大于
db.coll.find({age: {$lt: 22}}) # 大于
db.coll.find({age: 22}) # 等于
db.coll.find({age: {$ne: 22}}) # 不等于
db.coll.find({age: {$gte: 22}}) # 大于等于
db.coll.find({age: {$lte: 22}}) # 小于等于
# 显示从skip之后limit个
db.coll.find().limit(2).skip(1)
#-----------------------# # 用户
# 3.x之后版本添加用户
use admin
db.createUser({user:'nu', pwd:'nu', roles:[{role:'readWrite',db:'admin'}]})
# 用户认证
db.auth("nu", "nu");
# 显示当前所有用户
show users;
db.system.users.find()
3.x版本删除用户
db.removeUser('nu') # 不推荐使用,已经废弃
db.dropUser("nu");
# 当前db版本
db.version();
# 当前db的链接机器地址和端口
db.getMongo();
# 备份到备份目录
mongodump
# 从备份目录恢复备份语句。
mongorestore
咱们下期见。
既然有了NoSQL为什么还用MySQL,为什么不直接用nosql来存数据?
关系型数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于表与表之间进行连接等操作,但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。而非关系型数据库以键值对存储,它的结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。
特点:
它们可以处理超大量的数据。
它们运行在便宜的PC服务器集群上。
它们击碎了性能瓶颈。
没有过多的操作。
Bootstrap支持
缺点:
但是一些人承认,没有正式的官方支持,万一出了差错会是可怕的,至少很多管理人员是这样看。
此外,nosql并未形成一定标准,各种产品层出不穷,内部混乱,各种项目还需时间来检验
数据库有哪些
数据库有:
1、MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。
2、Oracle
Oracle开发的关系数据库产品因性能卓越而闻名,Oracle数据库产品为财富排行榜上的前1000家公司所采用,许多大型网站也选用了Oracle系统,是世界最好的数据库产品。
3、SqlServer
SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。
4、SQLite
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。
5、INFORMIX
Informix是IBM公司出品的关系数据库管理系统(RDBMS)家族。作为一个集成解决方案,它被定位为作为IBM在线事务处理(OLTP)旗舰级数据服务系统。
6、Redis
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
7、MongoDB
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。是非关系数据库当中功能最丰富,最像关系数据库的。
8、HBase
HBase是一个分布式的、面向列的开源数据库,该技术来源于Fay Chang所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。
9、Neo4J
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。10、CouchDB
10、CouchDB
CouchDB 是一个开源的面向文档的数据库管理系统,可以通过 RESTful JavaScript Object Notation (JSON) API 访问。它反映了 CouchDB 的目标具有高度可伸缩性,提供了高可用性和高可靠性,即使运行在容易出现故障的硬件上也是如此。
本文标题:nosql和mysql,为什么使用NoSQL
浏览地址:http://scyanting.com/article/phsehg.html