本节内容: 一,什么是NoSQL 不过,NoSQL的发展慢慢偏离了初衷,Carlo Strozzi也发觉,其实我们要的不是”no sql”,而应该是”no relational”,也就是我们现在常说的非关系型数据库了。 Wikipedia上对NoSQL的定义是这样的:NoSQL是一项运动,这个运动推动了广义定义的非关系型数据储存系统的发展,并破除了长久以来关系型数据库一家独大的局面。论文 二,为什么NoSQL变得流行 对数据库的“三高”需求
高并发读写 对海量数据的高效率读写 高扩展性和高可用性 关系型数据库的特性地位下降 事务一致性 读写实时性 复杂SQL,特别是多表关联查询 三,什么是 MongoDB MongoDB在Windows上的安装运行很方便。直接下载、解压,然后运行 bin/mongod 即可启动服务器,运行 bin/mongo 即可运行命令行客户端。 MongoDB命令行客户端的脚本语法有些类似MySQL的: show dbs // 列出所有数据库
use memo // 使用数据库memo。即使这个数据库不存在也可以执行,但该数据库不会立刻被新建,要等到执行了insert之类的操作时,才会建立这个数据库 show collections // 列出当前数据库的collections db // 显示当前数据库 show users // 列出用户 MongoDB的查询语法很强大。例如,很多SQL可以做的,它都可以做: 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也可以做: coll.find({"address.city":"gz"}) // 搜索嵌套文档address中city值为gz的记录
coll.find({likes:"math"}) // 搜索数组 coll.ensureIndex({"address.city":1}) // 在嵌套文档的字段上建索引 索引: 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仅支持很基本的安全策略): use shine // 如果要root权限,就用admin库
db.addUser("username", "password") // 普通权限,可读写 db.addUser("username", "password", true) // 只可读,不可写 db.system.users.remove({user: username}) // 删除用户 数据导出、导入: // 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中找到实现。 进行数据库连接的代码也十分简洁: 复制代码 代码示例:
Mongo mongo = new Mongo();
db = mongo.getDB("shine"); coll = db.getCollection("producttrade"); DBCursor cur = coll.find(); // 对cur进行操作。。。 说明: 一个对象被插入到数据库中时,如果它没有ID,会自动生成一个”_id”字段,为24位16进制数。 Mongo对象会自动维护一个连接池,默认连接数为10。 有关Mongodb的入门内容,就介绍这些吧,希望有助于大家认识与学习MongoDB这个不错的数据库系统。
|