因为未来业务发展的一个需求里的,考虑要用到NoSql,所以做了一些预研。今天简单体验了下mongdb,感觉挺合适的,有点热血沸腾。简单记录下mongoDB的一些初体验。
mongoDB的特性有哪些?以下是官网的定义:
MongoDB (from "humongo us") is a scalable, high-performance, open source NoSQL database. Written in C++, MongoDB features:
- Document-oriented storage »
JSON-style documents with dynamic schemas offer simplicity and power.
- Full Index Support »
Index on any attribute, just like you're used to.
- Replication & High Availability »
Mirror across LANs and WANs for scale and peace of mind.
- Auto-Sharding »
Scale horizontally without compromising functionality.
- Querying »
Rich, document-based queries.
- Fast In-Place Updates »
Atomic modifiers for contention-free performance.
- Map/Reduce »
Flexible aggregation and data processing.
- GridFS »
Store files of any size without complicating your stack.
- Commercial Support »
Enterprise class support, training, and consulting available.
以上定义很喜人吧,我还没有深入研究。其他的特性且不说,单是以下两个特性已经能满足我的需求了。
1.面向集合,模式自由 。 “面向集合”(Collection-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库 (RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。
2.虽然是非结构化数据,但支持动态查询 。允许在任意字段赏建立索引,支持任意属性作为条件的遍历查找。
不过深入的还需要在调研。
以下记录一下体验帖,没任何技术含量,入门可参考:
1.安装
1.下载:http://www.mongodb.org/downloads 在上面找到你需要的版本。
2.linux下的安装
解压即可,并通过sudo mkdir -p /data/db 创建数据存储目录。
3.启动:先到mongodb安装目录的bin目录下启动mongod,然后启动一个客户端mongo即可进行操作。输入help命令就可以查到主要的命令了。逐一体验即可。
2.java客户端体验
1.还是在官网上下载java driver
2.编写代码
以下是我编写的一些插入、查找功能等代码,还是十分简单的
package test.mongodb;
import java.net.UnknownHostException;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
public class MyDB {
DB db;
DBCollection coll;
MyDB(String dbName) {
Mongo m = null;
try {
m = new Mongo("localhost", 27017);//创建Mongo实例
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MongoException e) {
e.printStackTrace();
}
db = m.getDB(dbName);//获取数据库
coll = db.getCollection("foo");//数据集,类似表
}
/**
* 往数据集里插入一个文档
*/
public void insertDoc() {
BasicDBObject doc = new BasicDBObject();
doc.put("memberId", "abing3");
doc.put("businessModel", "manufature");
doc.put("count", 1);
BasicDBObject info = new BasicDBObject();
info.put("x", 203);
info.put("y", 102);
doc.put("attr", info);
coll.insert(doc);
}
/**
* 往数据集里循环插入文档
*/
public void loopInsertDoc() {
for (int i = 0; i < 100; i++) {
BasicDBObject doc = new BasicDBObject();
doc.put("memberId", "abing3"+i);
doc.put("businessModel", "manufature");
doc.put("count", 1);
BasicDBObject info = new BasicDBObject();
info.put("x", 203);
info.put("y", 102);
doc.put("attr", info);
coll.insert(doc);
}
}
/**
* 从数据集里查找一个文档
*/
public void findDoc() {
DBObject myDoc = coll.findOne();
System.out.println(myDoc);
}
/**
* 统计文档数
*/
public void countDocs(){
System.out.println(coll.count());
}
/**
* 通过游标遍历文档
*/
public void iterateAccess() {
DBCursor cur = coll.find();
while (cur.hasNext()) {
System.out.println(cur.next());
}
}
/**
* 通过条件查找
*/
public void findDocWithQuery() {
BasicDBObject query = new BasicDBObject();
query.put("member_id", "abing37");
DBCursor cur = coll.find(query);
while (cur.hasNext()) {
System.out.println(cur.next());
}
}
/**
* 查询集合
*/
public void querySet() {
BasicDBObject query = new BasicDBObject();
query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30));
DBCursor cur = coll.find(query);
while (cur.hasNext()) {
System.out.println(cur.next());
}
}
/**
* 创建索引
*/
public void createIndex() {
coll.createIndex(new BasicDBObject("memberId", 1));
}
//test
public static void main(String[] args) {
MyDB db = new MyDB("mydb");
// db.insertDoc();
// db.loopInsertDoc();
// db.findDoc();
// db.countDocs();
// db.iterateAccess();
// db.findDocWithQuery();
// db.querySet();
// db.createIndex();
}
}