写在前面
本文是由一次演讲整理出来的,文中大部分资料来源于网络,感谢Wikipedia,Google和MongoDB官网。文中使用的MongoDB版本为1.2.4。
What is NoSQL
NoSQL一词首先是Carlo Strozzi在1998年提出来的,指的是他开发的一个没有SQL功能,轻量级的,开源的关系型数据库。注意,这个定义跟我们现在对NoSQL的定义有很大的区别,它确确实实字如其名,指的就是“没有SQL”的数据库。不过,NoSQL的发展慢慢偏离了初衷,Carlo Strozzi也发觉,其实我们要的不是"no sql",而应该是"no relational",也就是我们现在常说的非关系型数据库了。
2009年初,Johan Oskarsson举办了一场关于开源分布式数据库的讨论,Eric Evans在这次讨论中再次提出了NoSQL一词,用于指代那些非关系型的,分布式的,且一般不保证遵循ACID原则的数据储存系统的出现和兴起。 Eric Evans使用NoSQL这个词,并不是因为字面上的“没有SQL”的意思,他只是觉得很多经典的关系型数据库名字都叫"**SQL"(例如 MySQL,MS SQL,PostgreSQL),所以为了表示跟这些关系型数据库在定位上的截然不同,就用了"NoSQL"一词。
Wikipedia上对NoSQL的定义是这样的:NoSQL 是一项运动,这个运动推动了广义定义的非关系型数据储存系统的发展,并破除了长久以来关系型数据库一家独大的局面。论文和研究中一般将这些数据库称为结构化储存系统 。
为什么NoSQL变得流行
robbin的一篇文章(为什么要用非关系数据库? )很好地讨论了这个问题,这里只列出几个要点。
对数据库的“三高”需求
-- 高并发读写
-- 对海量数据的高效率读写
-- 高扩展性和高可用性
关系型数据库的特性地位下降
-- 事务一致性
-- 读写实时性
-- 复杂SQL,特别是多表关联查询
What is MongoDB
MongoDB 是一个面向文档的数据库系统。使用C++编写,不支持SQL,但有自己功能强大的查询语法。MongoDB使用BSON作为数据存储和传输的格式。BSON是一种类似JSON的二进制序列化文档,支持嵌套对象和数组。MongoDB很像MySQL,document对应MySQL的row,collection对应MySQL的table。
MongoDB在Windows上的安装运行很方便。直接下载、解压,然后运行 bin/mongod 即可启动服务器,运行 bin/mongo 即可运行命令行客户端。更多关于MongoDB的运行看这里 。MongoDB命令行客户端的脚本语法有些类似MySQL的:
Js代码 收藏代码
show dbs // 列出所有数据库
use memo // 使用数据库memo。即使这个数据库不存在也可以执行,但该数据库不会立刻被新建,要等到执行了insert之类的操作时,才会建立这个数据库
show collections // 列出当前数据库的collections
db // 显示当前数据库
show users // 列出用户
MongoDB的查询语法很强大。例如,很多SQL可以做的,它都可以做:
Js代码 收藏代码
coll.find() // select * from coll
coll.find().limit(10) // select * from coll limit 10
coll.find().sort({x:1}) // select * from coll order by x asc
coll.find().sort({x:1}).skip(5).limit(10) // select * from coll order by x asc limit 5, 10
coll.find({x:10}) // select * from coll where x = 10
coll.find({x: {$lt:10}}) // select * from coll where x <= 10
coll.find({}, {y:true}) // select y from coll
一些SQL不能做的,MongoDB也可以做:
Js代码 收藏代码
coll.find({"address.city":"gz"}) // 搜索嵌套文档address中city值为gz的记录
coll.find({likes:"math"}) // 搜索数组
coll.ensureIndex({"address.city":1}) // 在嵌套文档的字段上建索引
索引:
Js代码 收藏代码
coll.ensureIndex({productid:1}) // 在productid上建立普通索引
coll.ensureIndex({district:1, plate:1}) // 多字段索引
coll.ensureIndex({productid:1}, {unique:true}) // 唯一索引
coll.ensureIndex({productid:1}, {unique:true, dropDups:true|) // 建索引时,如果遇到索引字段值已经出现过的情况,则删除重复记录
coll.getIndexes() // 查看索引
coll.dropIndex({productid:1}) // 删除单个索引
安全与认证(该版本的MongoDB仅支持很基本的安全策略):
Js代码 收藏代码
use shine // 如果要root权限,就用admin库
db.addUser("username", "password") // 普通权限,可读写
db.addUser("username", "password", true) // 只可读,不可写
db.system.users.remove({user: username}) // 删除用户
数据导出、导入:
Js代码 收藏代码
// json或csv格式,每次一个collection
mongoexport -d producttrade -c basic -o /home/data/mongo_backup/producttrade_100504.json
mongoimport -d producttrade -c basic --drop /home/data/mongo_backup/producttrade_100504.json
// 二进制数据格式,常用于备份、还原
mongodump -d shine -o /home/data/mongo_backup
mongorestore -d shine --drop /home/data/mongo_backup/shine
MongoDB in Java
到这里 下一个MongoDB的Java驱动,把jar包扔到项目里去就行了。上面提到的通过脚本操作的功能,基本上都能在Java中找到实现。进行数据库连接的代码也十分简洁:
Java代码 收藏代码
Mongo mongo = new Mongo();
db = mongo.getDB("shine");
coll = db.getCollection("producttrade");
DBCursor cur = coll.find();
// 对cur进行操作。。。
啰啰嗦嗦
每个BSON对象大小不能超过4MB。MongoDB使用GridFS 来储存大文件。
字段名限制:不能以"$"开头;不能包含".";"_id"是系统保留的字段,但用户可以自己储存唯一性的数据在字段中。
MongoDB为每个数据库分配一系列文件。每个数据文件都会被预分配一个大小,第一个文件名字为".0",大小为64MB,第二个文件".1"为128MB,依此类推,文件大小上限为2GB。
MongoDB没有新建数据库或者collection的命令,只要进行insert或其它操作,MongoDB就会自动帮你建立数据库和collection。当查询一个不存在的collection时也不会出错,Mongo会认为那是一个空的collection。
一个对象被插入到数据库中时,如果它没有ID,会自动生成一个"_id"字段,为24位16进制数。
Java中,Mongo对象是线程安全的,一个应用中应该只使用一个Mongo对象。Mongo对象会自动维护一个连接池,默认连接数为10。
- 浏览: 122625 次
- 性别:
- 来自: 成都
相关推荐
2. **查询构建器**:对于不熟悉MongoDB查询语法的用户,查询构建器是一个很好的功能。它可以图形化地帮助用户创建和编辑复杂的查询,无需直接编写JSON或JavaScript代码。 3. **性能分析**:NoSQLBooster具有内置的...
- **脚本执行**:支持MongoDB的JavaScript语法,可以编写和执行复杂的数据库操作脚本。 - **备份和恢复**:提供一键备份和恢复功能,确保数据安全。 - **安全设置**:帮助管理MongoDB的用户权限和角色,实现细粒度...
MongoDBDriver-Release-0.82.2是针对NoSQL数据库系统MongoDB的一个特定版本的驱动程序包。MongoDB是一种流行的开源、分布式文档数据库,它以JSON格式存储数据,提供高可伸缩性、高性能和灵活性。在这个版本中,我们...
3. 动态查询:MongoDB支持丰富的查询语法,包括字段选择、比较操作、正则表达式匹配、范围查询等,使得数据检索灵活多样。 4. 自动分片:MongoDB的自动分片功能可以根据数据大小或分布情况将数据均匀分散到多个物理...
4. **查询构建器**:对于不熟悉 MongoDB 查询语法的用户,查询构建器是一个非常实用的功能。通过图形化界面,用户可以构建复杂的查询语句,而无需手动编写 MongoDB 的查询命令。 5. **索引管理**:可以创建、修改和...
- **SQL兼容查询**:尽管MongoDB是NoSQL数据库,NosqlBooster提供了SQL查询接口,让习惯于SQL语法的用户也能轻松上手。 - **文档查看与编辑**:用户可以浏览数据库中的文档,支持JSON格式的编辑,包括添加、修改、...
NoSQL Manager for MongoDB是一款专为MongoDB设计的高效管理工具,它为数据库管理员和开发人员提供了一种直观且功能丰富的界面,以进行数据管理、查询优化、备份恢复等操作。 在MongoDB中,数据是以JSON格式的文档...
而"NoSQL Manager for MongoDB"则是一个专为MongoDB设计的强大管理工具,旨在帮助用户更有效地操作和管理MongoDB数据库。下面将详细介绍这款工具的功能、优势以及其在实际应用中的使用场景。 首先,作为一款可视化...
NosqlBooster for MongoDB是一款高效、用户友好的MongoDB管理工具,专为简化MongoDB的日常操作而设计。版本7.0.8是该工具的一个更新版本,提供了一系列增强的功能和优化,旨在提高开发人员和数据库管理员的工作效率...
4. **查询构建器**:内置的查询构建器允许你以图形化的方式编写查询,无需记住复杂的MongoDB查询语法,对于初学者特别友好。 5. **索引管理**:创建和管理索引是提升MongoDB性能的关键,NoSQL Manager让你可以轻松...
3. **查询构建器**:NoSQL Manager包含一个强大的查询构建器,允许用户创建复杂的查询,包括聚合框架的操作,无需记忆复杂的MongoDB查询语法。 4. **索引管理**:支持创建、修改和删除MongoDB的索引,有助于优化...
它支持对数据进行增删改查操作,如添加新记录、编辑现有记录、删除无用数据,并且提供了强大的查询构建器,允许用户通过简单的拖放或编写MongoDB查询语法来筛选和排序数据。 其次,这款工具支持备份和恢复功能,这...
MongoDB 是一种流行的NoSQL数据库系统,它结合了关系数据库和非关系数据库的优点,提供了一种灵活且高性能的数据存储解决方案。MongoDB 使用BSON(Binary JSON)格式存储数据,这种格式与JSON相似,但支持二进制数据...
MongoDB 是一个基于NoSQL的数据库,具有高效、灵活、易扩展等特点。在 MongoDB 中,查询语法是非常重要的一部分,本文将对 MongoDB 的查询语法进行详细的介绍。 基本查询语法 在 MongoDB 中,基本查询语法为 `db....
MongoDB是一种流行的开源、分布式、文档型的NoSQL数据库,其设计目标是处理大量数据的同时,提供高可用性、高性能和可伸缩性。在这个"MongoDB源码和PPT"的压缩包中,我们可以期待深入理解MongoDB的核心概念、工作...
### NoSQL数据库-MongoDB和Redis #### 一、NoSQL简述 NoSQL数据库的出现是为了应对传统关系型数据库无法解决的一些问题,特别是在大规模数据处理方面。CAP理论(Consistency,Availability,Partition Tolerance)...
### MongoDB语法使用说明详解 #### 一、前言与背景 MongoDB作为一款高性能、开源、面向文档的NoSQL数据库,凭借其灵活的数据模型、强大的查询能力以及易于扩展的特性,已经成为众多企业和开发者首选的数据存储解决...
2. **查询编辑器**:该工具包含一个强大的查询编辑器,支持MongoDB的查询语法,包括聚合框架、正则表达式匹配、地理空间查询等,用户可以方便地编写、执行和测试查询,查看结果。 3. **数据导入导出**:NoSQL ...