标签:mongodb
nosql:非关系型,分布式,不提供ACID
简单数据模型
元数据和应用数据分离
弱一致性
优势:
避免不必要的复杂性
高吞吐量
高水平扩展能力和低端硬件集群
不使用对象-关系映射
劣势:
不支持ACID特性
功能简单
没有统一的数据查询模型
ACID:atomicity原子性、consistency一致性、isolation隔离、durability持久性
nosql分类:
列式数据库(按列管理)
键值存储
文档数据库(每一行当做一个实体,独立的文件)
图存数据库(有复杂关系的图存对象),在社交站点用来存储人与人之间的复杂关系
nosql的数据存储模型
列式数据库(按列管理)
数据模型:数据按列存储,将同一列数据存在一起
优点:查找迅速,可扩展性强,易于实现分布式
缺点:功能相对sql有限
应用场景:分布式文件系统或分布式存储
实例:bigtable、cassandra、HBase、hypertable(海量数据存储)
跑在分布式文件系统上
键值存储(数据模型:key-value存储)
优点:查找迅速
缺点:数据无结构,通常只被当作字符串或二进制数据
应用场景:内容缓存
实例:redis、dynamo
文档数据库(每一行当做一个实体,独立的文件)
数据模型:与键值模型类似,但value指向结构化数据,多个键值对上面附加了一个容器
优点:数据格式要求不严格,无需事先定义结构
增加某个字段不需要改动其数据结构
缺点:查询性能不高缺乏统一查询语法
应用场景:web应用
实例:MongoDB、couchDB
图存数据库(有复杂关系的图存对象),在社交站点用来存储人与人之间的复杂关系
数据模型:图结构模型
优点:利用图结构相关算法,提供性能,并满特殊场景应用需求
缺点:难以实现分布式,功能有定向性
应用场景:社交网络、推荐系统、关系图谱
实例:Neo4J
mongodb:scalable(可扩展的)high-performance(高性能)open source schema free document nosql
schema free:不需要事先创建数据结构
读写在内存中
支持扩展性:复制、自动分片
适用于:web站点、缓存、高可扩展性、high volume,low value
mongodb的安装:这里推荐用rpm包安装
rpm包地址:https://repo.mongodb.org/yum/redhat,选择自己的版本进行下载
yum -y localinstall *.rpm
mkdir -p /mongodb/data:创建数据目录,修改配置文件中的数据目录路径
usermod -d /mongodb/data mongod
chown -R mongod:mongod /mongodb/data:修改数据目录的属主属组
最后简单的修改一下配置文件的信息(数据目录,日志目录等等)
最后就可以启动mongod
service mongod start
查看日志记录,发现如下警告:
cat /var/log/mongodb/mongod.log查看日志,报错如下:
** WARNING: soft rlimits too low. rlimits set to 1024 processes, 64000 files.
Number of processes should be at least 32000 : 0.5 times number of files.
参考:http://blog.csdn.net/kk185800961/article/details/45613267
mongodb当前限制:1024 processes, 64000 files
mongodb建议要求:processes = 0.5*files=32000(至少)
所以需要将 processes 从1024 改为 32000 或更大.
修改配置文件 /etc/security/limits.conf,添加配置信息:
###############for mongodb##############
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
然后重启mongod,再次查看日志记录,发现没有警告了,于是安装mongodb成功了
mongodb的简单grud操作:
>help(查看帮助)
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, ‘global‘ is default
use <db_name> set current database
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell
查看所有库:show dbs
查看所有集合(在mysql是表,在mongodb中用集合):show collections
切换库:use huangdb(无需在此前定义,直接拿来使用库就行)
向集合huangcoll中插入数据:db.huangcoll.insert({Name:"huang"})
查看集合的数据:db.huangcoll.find():这是查看集合huangcoll的所有数据
按条件查找数据:db.huangcoll.find({Name:"huang"}):找出Name为huang的文档
创建索引:db.huangcoll.ensureIndex({Name:1}):给字段Name创建索引
查看索引:db.huangcoll.getIndexes():查看当前集合下的所有索引
更多mongo命令操作,参考文档:
https://docs.mongodb.com/manual/crud/
标签:mongodb
原文地址:http://huangsir007.blog.51cto.com/6159353/1829527