因为未来业务发展的一个需求里的,考虑要用到NoSql,所以做了一些预研。今天简单体验了下mongdb,感觉挺合适的,有点热血沸腾。简单记录下mongoDB的一些初体验。
mongoDB的特性有哪些?以下是官网的定义:
MongoDB (from "humongo us") is a scalable, high-performance, open source NoSQL database. Written in C++, MongoDB features:
JSON-style documents with dynamic schemas offer simplicity and power.
Index on any attribute, just like you're used to.
Mirror across LANs and WANs for scale and peace of mind.
Scale horizontally without compromising functionality.
Rich, document-based queries.
Atomic modifiers for contention-free performance.
Flexible aggregation and data processing.
Store files of any size without complicating your stack.
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(); } }