MongoDB是非关系型数据库,俗称NoSql数据库,是文档存储型的
适用场景:
网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源 过载。
大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。
注意官网提供的下载与LINUX的版本号有密切联系的,所以请先注意自己LINUX系统的版本号再选择相应版本下载,防止出现一些其它错误。
为mongo创建存放数据的目录和日志文件
./mongodb-linux-x86_64-rhel55-3.0.6/bin/mongod -port 10001 --dbpath data/db/ --logpath log/mongodb.log
不过这里建议通过配置文件的方式启动
vi /etc/mongod.conf
# 日志文件位置
logpath=/var/log/mongo/mongod.log
# 以追加方式写入日志
logappend=true
# 是否以守护进程方式运行
fork = true
# 默认27017
#port = 27017
# 数据库文件位置
dbpath=/var/lib/mongo
# 启用定期记录CPU利用率和 I/O 等待
#cpu = true
# 是否以安全认证方式运行,默认是不认证的非安全方式
#noauth = true
#auth = true
# 详细记录输出
#verbose = true
# Inspect all client data for validity on receipt (useful for
# developing drivers)用于开发驱动程序时验证客户端请求
#objcheck = true
# Enable db quota management
# 启用数据库配额管理
#quota = true
# 设置oplog记录等级
# Set oplogging level where n is
# 0=off (default)
# 1=W
# 2=R
# 3=both
# 7=W+some reads
#diaglog=0
# Diagnostic/debugging option 动态调试项
#nocursors = true
# Ignore query hints 忽略查询提示
#nohints = true
# 禁用http界面,默认为localhost:28017
#nohttpinterface = true
# 关闭服务器端脚本,这将极大的限制功能
# Turns off server-side scripting. This will result in greatly limited
# functionality
#noscripting = true
# 关闭扫描表,任何查询将会是扫描失败
# Turns off table scans. Any query that would do a table scan fails.
#notablescan = true
# 关闭数据文件预分配
# Disable data file preallocation.
#noprealloc = true
# 为新数据库指定.ns文件的大小,单位:MB
# Specify .ns file size for new databases.
# nssize =
# Replication Options 复制选项
# in replicated mongo databases, specify the replica set name here
#replSet=setname
# maximum size in megabytes for replication operation log
#oplogSize=1024
# path to a key file storing authentication info for connections
# between replica set members
#指定存储身份验证信息的密钥文件的路径
#keyFile=/path/to/keyfile
mongod --config /etc/mongodb.conf
MnogoDB的数据类型
use demo
|
db.
demo.insert({"name":"chiwei"});db.demo.insert({"name":"chiwei"});
|
update() 方法用于更新已存在的文档。语法格式如下:
db.collection.update(<query>,<update>,{ upsert:<boolean>, multi:<boolean>, writeConcern:<document>})
参数说明:
db.collection.remove(<query>,<justOne>)
参数说明:
>db.col.find({ $or:[{key1: value1},{key2:value2}]}).pretty()
以下是简单的 fs.files 集合文档:
{ "filename": "test.txt", "chunkSize": NumberInt(261120), "uploadDate": ISODate("2014-04-13T11:32:33.557Z"), "md5": "7b762939321e146569b07f72c62cca4f", "length": NumberInt(646) }
以下是简单的 fs.chunks 集合文档:
{ "files_id": ObjectId("534a75d19f54bfec8a2fe44b"), "n": NumberInt(0), "data": "Mongo Binary Data" }
./mongofiles --port 10001 -d abc list 列出本地mongo abc数据库中的文件
|
./bin/mongod -port 10001 -dbpath ../data/db/ -logpath ../log/mongodb.log -logappend
-auth -fork
|
网上大部分都是mongo 2.x jar的应用实例,3.x变化很大
public static void main(String[] args) { List<ServerAddress> serverList = new ArrayList<ServerAddress>(); serverList.add(new ServerAddress("192.168.11.171", 10001)); MongoClient mongoClient = null; MongoClientOptions.Builder build = new MongoClientOptions.Builder(); build.connectionsPerHost(50); //与目标数据库能够建立的最大connection数量为50 build.heartbeatConnectTimeout(1000);//和集群的心跳连接超时的时间 build.heartbeatFrequency(10000);//心跳频率,默认10000ms build.heartbeatSocketTimeout(1000);//socket连接的心跳超时时间 build.threadsAllowedToBlockForConnectionMultiplier(50); //如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待 /* * 一个线程访问数据库的时候,在成功获取到一个可用数据库连接之前的最长等待时间为2分钟 * 这里比较危险,如果超过maxWaitTime都没有获取到这个连接的话,该线程就会抛出Exception * 故这里设置的maxWaitTime应该足够大,以免由于排队线程过多造成的数据库访问失败 */ build.maxWaitTime(1000*60*2); build.connectTimeout(1000*60*1); //与数据库建立连接的timeout设置为1分钟 MongoClientOptions myOptions = build.build(); char[] pwd = {'1','2','3','4','5','6'}; MongoCredential credential = MongoCredential.createCredential("root", "abc", pwd); List<MongoCredential> creList = new ArrayList<MongoCredential>(); creList.add(credential); try { mongoClient = new MongoClient( serverList, creList,myOptions); } catch (Exception e){ e.printStackTrace(); } MongoDatabase db = mongoClient.getDatabase("abc");//获取数据库实例 MongoCollection<Document> mc = db.getCollection("user"); Document bdo = new Document(); bdo.append("name", "eclipse"); bdo.append("age", 20); bdo.append("sex", 1); mc.insertOne(bdo); }
MongoDatabase db = mongoClient.getDatabase("abc");
GridFS fs = new GridFS(mongoClient.getDB("abc"),"wlan");
GridFSInputFile inputFile = fs.createFile(file);
inputFile.save();
System.out.println(inputFile.getFilename());
|
MongoDatabase db = mongoClient.getDatabase("abc");
GridFSBucket bucket = GridFSBuckets.create(db, "wlan");
GridFSUploadOptions options = new GridFSUploadOptions().chunkSizeBytes(1024);
FileOutputStream out = new FileOutputStream(new File("d:/xxx.jpg"));
bucket.downloadToStreamByName("
sample", out);
out.close();
|
FileOutputStream streamToDownloadTo =
new
FileOutputStream(
"/tmp/mongodb-tutorial.pdf"
);
gridFSBucket.downloadToStream(fileId, streamToDownloadTo);
streamToDownloadTo.close();
System.out.println(streamToDownloadTo.toString());
|
MongoDatabase db = mongoClient.getDatabase("abc");
GridFSBucket bucket = GridFSBuckets.create(db, "wlan");
ObjectId id = new ObjectId("565421e8f0d52f2124ee74d0");
bucket.rename(id, "sample-rename");
|
MongoDatabase db = mongoClient.getDatabase("abc");
GridFSBucket bucket = GridFSBuckets.create(db, "wlan");
ObjectId id = new ObjectId("56542158f0d52f70c0908b80");
bucket.delete(id);
|