最近工作中使用到MongoDB,也了解了一些,这篇文章就做一个入门级的介绍。
一、介绍
MongoDB是一个用C++编写的可度可扩展性的开源NoSQL数据库,其优点:
1. 文档存储:数据存储以BSON/JSON文档,这对于Web应用程序有很大的意义。开发者API喜欢以JSON形式传输,这使得整个项目的数据表示可采用统一的模型。所有这一切都无需任何前期架构设计。
2. 可扩展性:MongoDB被用在一些规模庞大的环境中,FourSquare/Craiglist都在使用它。通过分片数据缩放处理理论上可实现更高的吞吐量。
3. 简单的复制:就像分片技术一样,MongoDB范围内复制过程同样简单好用,在副本机器上还有大量的复制选项。灵活的功能可满足用户应用的需求。(data数据可以直接复制使用)
4. 易于查询:MongoDB以文档的形式存储数据,不支持事务和表连接。因此查询的编写、理解和优化都容易得多。简单查询设计思路不同于SQL模式,嵌入文档在特定的环境下可得到更好的查询,然而这需要先加入集合。如果需要执行多个请求到数据库则需要加入其到客户端。在MongoDB时ODM工具(如Doctrine2)将发挥自身的优势。(json查询还是很方便的)
5. 安全性:由于MongoDB客户端生成的查询为BSON对象,而不是可以被解析的字符串,所以可降低受到SQL注入的攻击的危险。最常见的攻击类型为针对Web应用程序的攻击,在MongoDB上使用Doctrine2 ODMs 查询语言可减轻攻击风险。
6. 价格:MongoDB是免费的!(原文:http://blog.newbridgegreen.com/7-reasons-to-use-mongodb/)
当然,MongoDB的缺点也很明显,与关系型数据库相比:
1.mongoDB不支持事务操作,对于一些要求严格的系统,这点就是MongoDB的硬伤。
2.mongoDB占用的空间太大,就我现在所做的项目,随便测一段时间,mongoDB的数据就有1G,因为mongoDB的字段名也占用很大的一部分空间,而且删除记录不释放空间,而是进行标记。(运行db.repairDatabase()来整理记录,不过过程比较慢)
二、安装与配置
1.下载mongoDB并解压即可。为了方便,解压并移动到D:\mongodb。
2.在mongodb文件下创建一个文件夹,命名“db”,用于存放mongodb的数据。
3.命令行(cmd),找到mongodb的bin路径(当然把它加入环境变量path中也是可以的),然后输入mongod --dbpath=D:\mongodb\db指定数据存放的文件夹“db”。
4.mongodb采用27017端口,我们可以在浏览器中输入:http://localhost:27017/,打开后可以查看mongodb的管理信息。
5.如果mongoDB没有服务正常启动,发生系统错误 109。那么删除数据库目录下mongod.lock文件然后重新启动即可。
6.这样每次启动mongoDB服务很不方便,我们可以像Oracle或MySQL一样,把它添加到windows服务中去,每次随系统自启动,不是更方便吗。
D:\mongodb\bin>mongod --install --serviceName mongoDB --serviceDisplayName mongoDB --logpath D:/mongodb/logs/mongoDB.Log --dbpath D:/mongodb/db --directoryperdb
--install:安装MongoDB服务
--remove:与--install相对,删除服务。
--serviceName:安装Windows服务时使用的服务名
--serviceDisplayName:在Windows服务管理器中显示的服务名
--logpath:MongoDB日志输出文件名称。虽说该参数直译是“日志路径”,其实要指定的是一个具体的完整文件名。这里我使用的是C盘根目录下的MongoDB.Log文件。该文件不用事先创建,直接指定就是了。
--dbpath:指定MongoDB数据存放的路径。这个就是最关键的参数了,不仅该目录要存在,并且最好不要以“\”结尾。
--directoryperdb:这个参数很好理解,让MongoDB按照数据库的不同,针对每一个数据库都建立一个目录,所谓的“目录每数据库”。
以后我们就可以在命令行下使用用命令net start MongoDB和net stop MongoDB来启动和停止MongoDB了,在本地服务中也可看到
三、入门操作
笔者用在工作中使用mongoDB也就进行了查询的一个操作:打开CMD,输入mongod,默认连接test数据库。
注:1.show dbs查看mongoDB中有哪些数据库,如SMB,test等。
2.use test连接哪个数据库。
3.show collections查看test数据库中有哪些数据集。
4.db.person.find()查询语句,查询person数据集中内容。
如果想继续了解mongoDB更多的内容,入门级的推荐:8天学通MongoDB。