处理很大规模的单表。数据库扩展是非常有挑战性的,当表格大小达到5-10GB时,MySQL表格性能会毫无疑问的降低。如果需要分片并分割数据库,MongoDB很容易实现
不可靠环境保证高可用性。设置副本集(主-从服务器设置)不仅方便,而且很快。此外,使用MongoDB还可以快速,安全及自动化地实现节点(或数据中心)故障转移
使用基于位置的数据查询,查得更快。MongoDB支持二维空间索引,如管道,因此可以快速及精确地从指定位置获取数据据。MongoDB在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内存资源相当丰富,那么将极大地提高数据库的查询速度,毕竟内存I/O效率比磁盘高很多。
非结构化数据的爆发增长 。增加列在有些情况下可能锁定整个数据库,或者增加负载从而导致性能下降,这个问题通常发生在表格大于1GB的情况。鉴于MongoDB的弱数据结构模式,添加一个新字段不会对旧表格有任何影响,整个过程会非常快速;因此,在应用程序发生改变时,不需要专门的一个DBA(数据库管理员)去修改数据库模式。
技术门槛相对低。如果没有专业的DBA,同时也不需要结构化数据及做join查询,那么MongoDB将会是首选。MongoDB非常适合类的持久化,类可以被序列化成JSON并储存在MongoDB中。需要注意的是,如果期望获得一个更大的规模,就必须要了解一些最佳实践来避免走入误区。
使用安装
从官网下载安装包,选择合适的版本下载
32bit的MongoDB最大只能存放2GB的数据,64bit就没有限制
mongodb-linux-x86_64-ubuntu.tgz
解压安装包
tar -zxvf mongodb-linux-x86_64-ubuntu.tgz移动
sudo mv mongodb-linux-x86_64-ubuntu.tgz/ /usr/local/mongodb新建配置文件mongod.conf,放到/etc目录下,写入6行命令
port=27017 dbpath=http://www.likecs.com/var/lib/mongodb/ logpath=http://www.likecs.com/var/log/mongodb/mongodb.log fork=true logappend=true noauth=true # 无密创建相关文件和文件
sudo mkdir /var/lib/mongodb/ sudo mkdir /var/log/mongodb/ sudo touch /var/log/mongodb/mongodb.log创建软链接,方便调用mongod和mongo命令
sudo ln -sf /usr/local/mongodb/bin/mongod /usr/local/sbin/mongod sudo ln -sf /usr/local/mongodb/bin/mongo /usr/local/sbin/mongo启动
启动服务器端
或
sudo mongod -f /etc/mongod.conf启动客户端
sudo mongo查看数据库的状态信息
db.stats()关闭服务器
use admin db.shutdownServer() 常用的数据类型object id # 文档id
string # 字符串,最常用,必须是有效的UTF-8
boolean # 布尔值,True或False
integer # 整数可以是32位或64位,取决于服务器
double # 浮点值
array # 数组或列表,多个值存储到一个键
object # 用于嵌入式的文档,即一个值为一个文档
null # 存储null值
timestamp # 时间戳
date # 存储当前日期或时间的UNIX时间格式
说明:
object id。每个文档都有一个属性,为_id,保证每个文档的唯一性,可以自己去设置_id插入文档。
如果没有提供,MonoDB为每个文档提供了一个独特的_id,类型为ObjectID.
ObjectID是一个12字节的十六进制数,前4个字节为当前时间戳,后3个字节为机器ID,后2个字节为MongoDB的服务进程id,最后3个字节为简单的增量值
命令操作
use mydb db.stu.insert([ { \'name\': "郭靖", "hometown": \'蒙古\', "age": 20, \'gender\': true }, { \'name\': \'黄蓉\', \'hometown\': \'桃花岛\', \'age\': 18, \'gender\': false } ])