`
reniaL
  • 浏览: 93504 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

NoSQL介绍及MongoDB入门

阅读更多

写在前面

本文是由一次演讲整理出来的,文中大部分资料来源于网络,感谢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的:

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进行操作。。。

 

啰啰嗦嗦

  • 每个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。
5
2
分享到:
评论
1 楼 xyq1558 2012-12-11  
数据文件大小,32位系统才有2GB限制,64位是没有这个要求的

相关推荐

    NoSQL介绍PPT

    常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 正在使用NoSQL的一些知名...

    主流NOSQL数据库之MongoDB快速入门.docx

    主流NOSQL数据库之MongoDB快速入门

    MongoDB入门.pdf

    非常使用的文档,可以入门 可以做工具书

    MongoDB入门经典 中文版 Teach.Yourself.NoSQL.with.MongoDB.in.24.Hours 高清完整版pdf 带详细书签

    文件已上传到百度网盘,附件中是下载地址。... Teach.Yourself.NoSQL.with.MongoDB.in.24.Hours-MongoDB入门经典 [美]布拉德·戴利(brad dayley)(著) | 米爱中(译) | 人民邮电出版社 | 9787115391117 | 2015-06-01

    Big.Data.NoSQL.Architecting.MongoDB.epub

    Big Data, MongoDB not only enables the user in understanding the buzz words “Big Data” and “NoSQL”, it also delves in understanding one of the popular document-based NoSQL databases “MongoDB”....

    MongoDB入门经典

    资源名称:MongoDB入门经典内容简介:本书采用直观、循序渐进的方法,讲解了如何设计、实施和优化NoSQL数据库,如何存储和管理数据,以及如何执行数据分片和复制等任务。全书共24章。适合对NoSQL以及MongoDB感兴趣的...

    NoSQL入门介绍

    1、NoSQL技术介绍 1.1、NoSQL是什么 1.2、NoSQL为什么会存在 1.3、NoSQL产品分类 1.4、NoSQL技术的特点 1.5、NoSQL技术的不足 1.6、NoSQL的适用场景 2、一些概念 2.1、CAP 2.2、ACID 2.2、BASE 3、常见NoSQL介绍 ...

    MongoDB入门到精通 中文资料

    Mongo DB ,是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式,备受当前IT从业人员的青睐。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。Mongo...

    主流NOSQL数据库之MongoDB快速入门

    目前,NOSQL在业界正发展的如火如荼,其中Mongodb是其中十分优秀的一员,MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。在本系列教程中,将分三部分...

    NoSQL 入门.ppt

    《NoSQL 入门.ppt》,是一个关于 NoSQL 入门的教程。PPT 格式,大小 1 MB。 内容预览: 1、NoSQL技术介绍 1.1、NoSQL是什么 1.2、NoSQL为什么会存在 1.3、NoSQL产品分类 1.4、NoSQL技术的特点 1.5、NoSQL技术的不足 ...

    MongoDB基础入门到高级进阶

    系统的学习MongoDB从入门到进阶,掌握现在火爆的NoSQL技术之一。 选择MongoDB的原因及其优势 MongoDB单机部署、副本集部署、分片部署以及相关操作 MongoDB的客户端连接和常用命令操作 SpringDataMongoDB对MongoDB的...

    mongoDb入门

    软件安装的一些指南 很生动易懂,还有一些入门的技巧介绍

    NoSQL数据库入门

    NoSQL, Redis, MemCache, MongoDB, NoSQL数据库入门。

    MySQL、Redis、MongoDB 零基础入门

    MySQL、Redis、MongoDB 零基础到入门系统性学习(详)

    NOSQL数据库入门.pdf-----佐佐木达也

    适合了解NOSQL,对nosql感兴趣可下载,入门学习级

    mongodb快速入门

    mongodb快速入门教程,适合新手的nosql数据库教程

    springboot整合MongoDB初级入门

    springboot整合MongoDB初级入门,非常实用于刚接触springboot以及MongoDB的朋友,一看就懂,一学就会。

    MongoDB入门笔记

    用MindMaster以脑图形式,记录对MongoDB的简单操作和基础了解,适合完全不了解MongoDB的人想快速的了解下面几个问题: 1.MongoDB是什么? 2.安装MongoDB 3.MongoDB对文档的增删改查、索引、聚合 4.用Java操作MongoDB...

    MongoDB入门篇1

    1.1 数据 1.1.1 什么是数据 1.1.2 什么是数据库管理系统 1.1.3 常见数据库管理系统 1.2.2 NoSQL数据库四大家族 1.3.3 关系型

Global site tag (gtag.js) - Google Analytics