NoSQL 简单了解
文章目录
NoSQL 数据库与传统的关系型数据库相比,它具有操作简单、完全免费、源码公开、随时下载等特点,并可以用于各种商业目的。
这使 NoSQL 产品广泛应用于各种大型门户网站和专业网站,大大降低了运营成本。其中风头最劲的莫过于 MongoDB 了。
非关系型数据库和关系型数据库区别
非关系型数据库的优势
-
性能
NoSQL 是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过 SQL 层的解析,所以性能非常高。
-
可扩展性
同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
-
适用于存储杂乱无章的数据,如网页数据
关系型数据库的优势
-
复杂查询
可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
-
事务支持
使得对于安全性能很高的数据访问要求得以实现。
对于这两类数据库,对方的优势就是自己的弱势,反之亦然。
NoSQL 数据库分类
- 文档存储: 文档存储一般用类似 json 的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。如 MongoDB、TableStore
- 键值存储:可以通过 key 快速查询到其 value。一般来说,存储不管 value 的格式,照单全收。如 Redis、Memcached
MongoDB
-
基本说明
- 占用端口:27017
- 配置文件路径:/usr/local/etc/mongod.conf
- mongo: 进入命令模式
- MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
- MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是个 ObjectId 对象由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间.
- 在 MongoDB 中,你不需要提前创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
- 分页功能:基于Skip分页和有序字段查询分页两种方案进行的对比,后者说白了只是利用查询结果不用依次数数来提高了性能,Skip虽然效率低一些但是通用一些。
- 不支持多表联合查询和事务查询
- 注意:MongoDB 默认直接连接,无须身份验证,如果当前机器可以公网访问,且不注意 Mongodb 端口(默认 27017)的开放状态,那么 Mongodb 就会产生安全风险,被利用此配置漏洞,入侵数据库。
-
MacOS 下 MongoD 第一次创建root用户流程
1 2 3 4 5 6 7 8 9 10 11
$ brew services start mongodb $ mongo > use admin > db.createUser({ user: "root" , pwd: "root", roles: [{role: "root", db: "admin"}]}) # 创建超级用户 > db.auth('root', 'root') # 验证用户是否设置成功,1为成功 $ vi /usr/local/etc/mongod.conf # 更改mongodb配置文件 # 配置文件开启强制验证,增加如下内容: security: authorization: "enabled" $ brew services restart mongodb
-
MongoDB 创建新项目用户流程
1 2 3 4 5 6 7 8 9 10
> mongo -u root -p root --authenticationDatabase admin > use test > db.createUser({ user: "yapi", pwd: "yapi123456", roles: [ { role: "dbAdmin", db: "yapi" }, { role: "readWrite", db: "yapi" } ] });
-
常用命令
1 2 3
> mongo -u root -p root --authenticationDatabase admin # 验证账号密码是否能正常登陆 > show users; > show dbs;
HBase vs Cassandra
-
HBase: 键值存储,读比写快
面向大数据领域的一站式NoSQL服务,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库。
-
Cassandra: 键值存储,写 比 读快
方便扩展存储;有弹性的模式定义;高写入性能。适用于大量写入的场景。