MongoDB简介
MongoDB简介
1 MongoDB简介
MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案
不是内存型数据库,是一个文件型存储数据库
访问效率接近于redis
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
bson:二进制的json, 结构、表达形式、语法与json一摸一样,但数据管理是使用字节(注意与json的区别)
MongoDB最大的特点在于它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,并且支持对数据库建立索引。
MongoDB中支持分组查询、统计
使用集合来存储数据
MongoDB只支持单表查询,不支持连接、多表查询
适用于中小型项目(性能比mysql好,但数据间无关系,会造成数据冗余)
不适用于大型项目(数据量太大,数据冗余太多)
不适和用作缓存
RDBMS: 关系型数据库
2 什么是NoSQL
Not Only Sql
不仅仅是SQL
3 NoSQL数据库的分类
3.1 键值存储数据库
依托于键值存储,存放到Hash表中的一种数据存储
优点:单一数据的读写效率高
缺点:批量操作效率低下
如:Tokyo、Tyrant、Redis、Voldemort、Oracle RDB
3.2 列存储数据库
通常用来应对分布式存储的海量数据。
键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。
如:Cassandra、HBase、Riak
3.3 文档型数据库
部分数据批量查询效率更高
如:MongoDB、CouchDB,国内也有文档型数据库SequoiaDB,已经开源
3.4 图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,他是使用灵活的图形模型,并且能够扩展到多个服务器上
NoSQL通常都会提供Rest接口,如:Neo4J、InfoGrid、Infinite Graph
4 MongoDB与关系型数据库术语对比
| sql术语概念(RDBMS) | MongoDB术语概念 | 解释 |
|---|---|---|
| database | database | 数据库 |
| table | collection | 数据库表/集合(所有数据的操作都是依托于集合操作) |
| row | document | 数据行/文档(一个完整的json数据) |
| column | field | 字段/域 |
| index | index | 索引/(某一个集合中,某一个字段创建索引) |
| table join | 表连接/不支持(mongoDB中,集合与集合没有任何关系) | |
| primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
5 MongoDB与关系型数据库存储数据对比
6 MongoDb的数据类型
| 数据类型 | 描述 |
|---|---|
| String | 字符串,在MongoDB中,UTF-8编码的字符串才是合法的 |
| Integer | 整形,存储数值,根随服务器长度(32位或64位) |
| boolean | 布尔值(存0/1,表真/假) |
| Double | 双精度浮点值 |
| Min/Max keys | 将一个值与BSON(二进制的JSON)元素的最低值和最高值相对比 |
| Array | 用于将数组或列表或多个值存储为一个键 |
| Timestamp | 时间戳,记录文档添加或修改的具体时间 |
| Object | 用于内嵌文档 |
| Null | 空值 |
| Symbol | 符号。 |
| Date | 日期时间,如果通过java存储时间则是格林尼治时间,java读时自动转换时区。如果时客户端直接存储则不做时区转化 |
