因为未来业务发展的一个需求里的,考虑要用到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.
扫描二维码关注公众号,回复: 1418798 查看本文章 - 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(); } }