以前学的,现在分享出来,后面有一些没写,有时间再补了。
第一章 NoSql简介
NoSql:Not Only Sql,指非关系型数据库,用于超大规模数据的存储
特点:
1. 代表着不仅仅是sql
2. 没有声明性的查询语言
3. 没有预定的模式
4. 键/值对存储,列存储,文档存储,图形数据库
5. 最终一致性,而不是ACID属性
6. 非结构化和不可预知的属性
7. CAP定理
8. 高性能、高可用性和可伸缩性
NoSql简史:NoSql一词最早出现在1998年,是Carlo Strozzi开发的一个轻量级、开源、不提供sql功能的关系型数据库
2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSql主要指非关系型、分布式、不提供ACID的数据库的设计模式 <br>2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;"。 <br>因此,对NoSql最普遍的解释是:非关系型的,强调Key-Value Stores和文档数据库的优点,而不是单纯的但对ACID.
第二章 MongoDB安装
- 在开源中国下找到MongoDB的下载路径,下载安装
- 在dos下启动MongoDB,定义dbpath. D:\MongoDB\bin>mongod –logpath D:\MongoDB\logs\MongoDB.log –logappend
–dbpath D:\MongoDB\data –directoryperdb –serviceName MongoDB –install - 另启dos,通过mongo命令进入mongodb, :mongo 10.3.19.31:62167/test -user -pwd
第三章 MongoDB的概念
SQL | MongoDB | 说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据行/文档 |
column | field | 数据列/属性 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键。MongoDB会自动创建名为_id的主键 |
数据库
一个mongodb可以有多个数据库,默认数据库为db,存储在data目录下
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
查看数据库 “show dbs”
显示当前数据库对象或集合 “db”
切换数据库 “use dataBaseName
数据库命名规范;
1. 不能是空字符串(“”)
2. 不能含有空格、.、$、/、\和\0(空字符)
3. 应全部小写
4. 最多64个字节
保留数据库:
* admin:拥有所有的数据库权限
* local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
* config:当mongo用于分片设置时,config数据库内在内部使用,用于保存分片的相关信息
文档
文档对应RDBMS中的数据行
文档是一个键值对(bson)。MongoDB的文档不需要设置相同的字段,也不需要相同的数据类型。
RDBMS | MongoDB |
---|---|
数据库 | 数据库 |
表格 | 集合 |
行 | 文档 |
列 | 字段 |
表联合 | 嵌入文档 |
主键 | 主键(MongoDB提供了key为_id的主键) |
数据库服务和客户端
Mysqld/Oracle mongod
mysql/sqlplus mongo
注意点:
1. 文档中的键值对是有序的
2. 文档中的值不仅可以是在双引号之中的值,还可以是其他的数据类型(甚至可以是嵌入整个文档)
3. MongoDB区分类型和大小写
4. MongoDB的文档键值不能重复(两个属性不能重名)
5. 文档的键是字符串。除了少数情况,键名可以是任意的UTF-8字符
文档键的命名规范:
1. 不能包含\0(空字符),这个字符用来表示键的结尾
2. “.”和$有特殊意义,只能在特殊情况下使用
3. 以下划线开头的名字是保留的(非严格的)
集合
集合是MongoDB中的文档组,对应RDBMS中的数据表格
集合存在于数据库中,没有固定的结构,可以插入不同格式和类型的数据,通常情况下,插入的数据会有一定的关联性
当第一个文档被插入时,集合就会被创建(集合是文档的容器)
集合命名规范:
* 不能是空字符串””
* 不能包含\0
* 不能以”system.”开头,为系统集合保留
* 用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$
capped collections
固定大小的集合
capped collections是高性能的自动维护对象的插入顺序。非常适合类似日志记录的功能
与collection(在插入第一条文档时,会自动创建的那种)不同,必须显示创建一个capped collections,指定集合的大小,单位是字节。collection的数据存储空间是提前分配的。eq:db.createCollection(“asd”,{capped=true,size=10000})
注意点:
1. 可以向集合中添加新的数据,如果空间都被使用完毕,新添加的对象会取代最旧的那个数据
2. 可以更新,但是不能增加存储空间,若增加了,则会更新失败
3. 数据库不允许进行删除单个文档,只能使用drop()删除这个collection的所有行
4. 删除之后,如果想再次使用,必须显示的重新创建这个collection。
5. 在32bit机器中,capped collection最大存储为1e9( 1X109)个字节。
未完待续!!!