mongodb 和 mysql

MySQL 是一个功能齐全的开源关系数据库管理系统(RDBMS)。它将数据存储在分组到数据库中的表中,使用结构化查询语言(SQL)来访问数据,并使用“SELECT”,“UPDATE”,“INSERT”和“DELETE”等命令来管理它。相关信息可以存储在不同的表中,但JOIN操作的使用允许您关联它,跨各种表执行查询并最小化数据重复的可能性。
MySQL几乎兼容所有操作系统,即Windows,Linux,Unix,Apple,FreeBSD等等。它支持各种存储引擎,如InnoDB(它是默认的),Federated,MyISAM,Memory,CSV,Archive,Blackhole和Merge。

简要概念

关系型数据库

在不同的引擎上有不同 的存储方式。

查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。

开源数据库的份额在不断增加,mysql的份额页在持续增长。

缺点就是在海量数据处理的时候效率会显著变慢。

MongoDB 是一个流行的开源文档导向数据库。文档创建并存储在BSON文件中,二进制JSON(JavaScript Object Notation)格式,因此所有JS类型的数据都是支持的。MongoDB通常应用于Node.js项目。除此之外,JSON还可以使用人类可读的格式在服务器和Web应用程序之间传输数据。在存储容量和速度方面,它也是一个更好的选择,因为它提供更高的效率和可靠性。
MongoDB提供的最大好处之一是使用动态模式,无需预先定义结构,如字段或值类型。这种模型允许分层关系表示,数组存储,以及通过简单地添加或删除字段来更改记录结构的能力。这种NoSQL解决方案具有嵌入,自动分片和板载复制功能,可实现更好的可扩展性和高可用性。

关系型数据库(nosql ),属于文档型数据库。先解释一下文档的数据库,即可以存放xml、json、bson类型系那个的数据。这些数据具备自述性(self-describing),呈现分层的树状数据结构。数据结构由键值(key=>value)对组成。

存储方式:虚拟内存+持久化。

查询语句:是独特的Mongodb的查询方式。

适合场景:事件的记录,内容管理或者博客平台等等。

架构特点:可以通过副本集,以及分片来实现高可用。

数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。

成熟度与广泛度:新兴数据库,成熟度较低,Nosql数据库中最为接近关系型数据库,比较完善的DB之一,适用人群不断在增长。

优势:

  • 快速!在适量级的内存的Mongodb的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快,
  • 高扩展!
  • 自身的Failover机制!
  • json的存储格式!

缺点:主要是无事物机制!

具体特点总结如下:

(1)面向集合存储,易于存储对象类型的数据

(2)模式自由

(3)支持动态查询

(4)支持完全索引,包含内部对象B

(5)支持复制和故障恢复

(6)使用高效的二进制数据存储,包括大型对象(如视频等)

(7)自动处理碎片,以支持云计算层次的扩展性

(8)支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及C++语言的驱动程序,社区中也

提供了对 Erlang 及.NET 等平台的驱动程序

(9) 文件存储格式为 BSON(一种 JSON 的扩展)

MongoDB实现增删改查基本命令
mongod:
打开或者新建一个数据库 :mongod --dbpath dir

mongoinport:
导入mongo文件 :mongoinport --db test --collection user --drop --file C:\User\mongodb\document.json

–db 导入到哪个库
–collection 导入到哪个集合
–drop 加上就表示清空原有文档
–file 要导入的文件

mongo:
创建一个新的库 :use dbname
查看所有库 :show dbs
查看当前库所有集合 :show collection

增加:
在名为collectionName的集合中插入一条文档,如果集合不存在,则新建该集合 :db.collectionName.insert(obj)

例子:在student集合中插入文档

db.student.insert({
    id:101,
    name: '张三', 
    sex: '男',
    address: '广东'
})

查询:
查找名为collection集合的所有文档 :db.collectionName.find()

查询k的值为v的文档 : db.collectionName.find({k : v})

查询k1的值为v1 且 k2的值为v2的文档 :db.collectionName.find({k1 : v1},{k2 : v2})

查询k1的值为v1 或 k2的值为v2的文档 :db.collectionName.find($or : {k1 : v1},{k2 : v2})

查询k的值大于v的文档,$ gte大于等于(>=) : db.collectionName.find({k : {$gt:v}})

查询k的值小于v的文档,$ lte小于等于(<=) : db.collectionName.find({k : {$lt:v}})

查询前三条数据 :db.collectionName.find().limit(3)

修改:
修改文档

db.collectionName.update(
    {k1 : v1},   //修改k1的值为v1的文档
    {
        $set:{k2 : v2, k3 : v3},
    }
)

替换文档

db.collectionName.update{
    {k1 : v1},
    {
        k2 : v2,
        k3 : v3
    }
}

删除:
删除当前所在的数据库 :db.dropDatabase()

删除集合 :db.collectionName.drop()

删除匹配到的所有k为v值的文档 :db.collectionName.remove({k : v})

删除第一个匹配到的所有k为v值的文档 :db.collectionName.remove({k : v},{justOne:true})

清空集合 :db.collectionName.remove({})

排序

db.collectionName.find().sort({k1 : 1},{k2 : -1})

按照k1来排序、如果k1的值相同、按照k2来排序、1代表升序、-1降序

统计条数

db.collectionName.count({k : v})

模糊查询
查询有XXX

db.collectionName.find({k : /模糊查询字符串/})
//比如查询名字包含"定"字的人:
db.collectionName.find({name:/定/})

查询以XXX开头

db.collectionName.find({k : /^字符串/})
//比如查询名字以"郑"开头的人:
db.collectionName.find({name:/^郑/})

查询以XXX字结尾

db.collectionName.find({k : /字符串$/})
//比如查询名字以"移"字结尾的人:
db.collectionName.find({name:/移$/})

包含

db.collectionName.find({k : {$in[v1,v2]}})   
//比如查询userid字段包含3和4的文档:
db.collectionName.find({userid:{$in["3","4"]}})

不包含

db.collectionName.find({k : {$nin[v1,v2]}})
//查询userid字段不包含2和3的文档:
db.collectionName.find({userid:{$nin["2","3"]}})

六、Docker安装MongoDB
在宿主机创建 mongo 容器

docker run -id --name=ktc_mongo -p 27017:27017 mongo


远程登陆

mongo 192.168.12.128

MongoDB客户端操作起来未免太过复杂,因此我们采用第三方的可视化工具来帮我们操作MongoDB,就类似于我们使用Navicat来操作MySQL一样

七、MongoDB的可视化工具
1、NoSQLBooster for MongoDB
2、Robo 3T

比较:

数据库

MongoDB

MySQL

数据库模型

非关系型

关系型

存储方式

以类JSON的文档的格式存储

不同引擎有不同的存储方式

查询语句

MongoDB查询方式(类似JavaScript的函数)

SQL语句

数据处理方式

基于内存,将热数据存放在物理内存中,从而达到高速读写

不同引擎有自己的特点

成熟度

新兴数据库,成熟度较低

成熟度高

广泛度

NoSQL数据库中,比较完善且开源,使用人数在不断增长

开源数据库,市场份额不断增长

事务性

仅支持单文档事务操作,弱一致性

支持事务操作

占用空间

占用空间大

占用空间小

join操作

MongoDB没有join

MySQL支持join

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值