`

MongoDB快速入门(java版)(草稿)

 
阅读更多

主做应用服务器的客串android/windows phone客户端,计划未来iphone(当然赚到票票再说)。

简单拟定了下产品的文档,下面是整个服务器的架构示意图:

imageimage

对于社交类型的系统,数据库的I/O注定会成为一大瓶颈,单点数据库体系肯定应付不了如此大的访问量,像facebook,twitter,foursquare之类的社交型平台都有自己的一套方案来解决数据库瓶颈问题。一开始我在持久化框架的选取上我的注意力放在了iBatis和hibernate上,虽然表面上hibernate用起来简单,但是若想将其性能发挥到极致还是很有难度的,iBatis的sql mapping半自动化方案反而使性能优化更加灵活。就在考察这两个框架本身的性能以及与缓存、分布式的应用过程中无意间发现了mongodb这个东西,早在一年前就在jdon上看到过板桥先生关于nosql替代关系型数据库的言论,不过当时才疏学浅一直不明白什么是key-value型的数据库,正好这次有机会领教一下传说中的nosql。查阅了官方的文档和网上的讨论以及morphia-0.95这个支持mongodb的orm框架后,我决定在这个项目中大胆尝试采用mongodb+morphia做持久层。

首先认识下mongodb,从http://www.mongodb.org/display/DOCS/Home下载到对应的版本(建议下载64位版本,这样可以突破32位系统的单文件2GB限制),解压后在bin中既是mongodb的所有程序文件(很绿色吧~~)

image

为方便使用,写一个脚本的方便以后启动mongodb服务器和客户端控制台。

server.cmd

@echo off
cd bin
mongod -port 27017 -dbpath "d:\mongodb\dbdata" run

client.cmd

@echo off
cd bin
mongo 127.0.0.1:27017


 

 

mongodb与普通的关系型数据库类似有Database的概念,但没有表的概念,取而代之的是collection,没有row的概念,取而代之的是document,事物支持比较弱。

使用mongodb api操作数据库示例

……

DBAddress dbServer_2 = new DBAddress("localhost:27017");
DBAddress dbServer_1 = new DBAddress("localhost:27018");
Mongo Mongo = new Mongo(dbServer_1, dbServer_2);
if(Mongo.authenticate("dokhell", "unikey"))
        throw DbAuthenticateException;

Set<String> names = Mongo.getDB("bestpro").getCollectionNames();
        DBCursor cursor = Mongo.getDB("bestpro").getCollection("bestpro").find();
        for(DBObject obj : cursor) {
            System.out.println(obj.get("a"));
        }
        DB db = Mongo.getDB("bestpro");
        Collection coll = db.getCollection("bestpro");

……

当然,我们还需要一套orm来简化我们的数据库访问机制。这里有一个开源的orm框架morphia对mongdb提供良好的支持。

//操作聚合实体与值对象

Morphia morphia = new Morphia();
        DBAddress dbAddr = new DBAddress("localhost:27017");
        Mongo m = new Mongo(dbAddr);
        BlogDao dao = new BlogDao(m, morphia, "bestpro");
        dao.deleteByQuery(dao.createQuery().field("title").equal("this is next blog222"));
       
        //System.out.println(dao.createQuery().limit(2).asList().get(1).getTitle());
        ArticalEntity blog = new ArticalEntity();
        //blog.setTitle("this is my fault222!`");
        //dao.save(blog);
        List<Comment> comments = new ArrayList<Comment>();
        Comment comment1 = new Comment();
        comment1.setName("comment1222");
        comment1.setContent("this is the comment's content");
       
        Comment comment2 = new Comment();
        comment2.setName("comment1222");
        comment2.setContent("this is the comment's content");
        comments.add(comment2);
        blog.setComments(comments);
       
        ArticalEntity nextBlog = new ArticalEntity();
        nextBlog.setTitle("this is next blog222");
        blog.setNextBlog(nextBlog);
        //InsertOrUpdate
        dao.save(nextBlog);//关联的聚合实体需要在被包含的实体持久化之前持久化
        dao.save(blog);
       
        blog.setTitle("应该能够能支持中文的,因为全是二进制数据");
        dao.save(blog);
        //QueryAndUpdate(special update form)
        //UpdateOperations ops = dao.createUpdateOperations().set("a", "2");
        //dao.update(dao.createQuery(), ops);
        //query
        QueryResults<ArticalEntity> entities = dao.find();
        System.out.println(entities.asList().get(0).getTitle());
        //pager
        System.out.println(dao.createQuery().offset(0).limit(1).asList().get(0).getTitle());

跨collection操作

Morphia morphia = new Morphia();
        DBAddress dbAddr = new DBAddress("127.0.0.1:27017");
        Mongo m = new Mongo(dbAddr);
        BlogDao blogDao = new BlogDao(m, morphia, "bestpro");
        PersonDao personDao = new PersonDao(m, morphia, "bestpro");
        PersonEntity person = new PersonEntity();
        person.setName("my name is ……");
        ArticalEntity artical = new ArticalEntity();
        artical.setTitle("this is a title");
        artical.setPerson(person);
        personDao.save(person);
        blogDao.save(artical);

相关资源链接:

mongodb quick start

http://www.mongodb.org/display/DOCS/Quickstart

mongodb驱动jar包+morphia的jar包下载:

http://files.cnblogs.com/wJiang/mongo_dev.rar

  • 大小: 126 KB
  • 大小: 179.7 KB
  • 大小: 35.4 KB
分享到:
评论

相关推荐

    10、MongoDB快速入门实战-ev.rar

    10、MongoDB快速入门实战_ev.rar10、MongoDB快速入门实战_ev.rar10、MongoDB快速入门实战_ev.rar10、MongoDB快速入门实战_ev.rar10、MongoDB快速入门实战_ev.rar10、MongoDB快速入门实战_ev.rar10、MongoDB快速入门...

    mongodb快速入门介绍

    mongodb快速入门介绍

    MongoDB快速入门资料

    本快速入门资料将帮助你了解MongoDB的基础概念、安装配置、数据模型以及如何在Java环境中进行操作。 一、MongoDB基础 MongoDB使用JSON格式的数据存储,这种格式被称为BSON(Binary JSON),在保持JSON可读性的同时...

    MongoDBjava各版本驱动下载

    MongoDB Java驱动是Java开发者与MongoDB数据库交互的重要工具,它允许Java应用程序通过标准的Java API来执行查询、插入、更新和删除等操作。在Java中使用MongoDB,首先需要安装并配置对应的驱动版本,以确保与正在...

    MongoDB入门教程 + 架构简析 + java使用MongoDB的简单程序

    首先,我们从"MongoDB入门教程"开始。MongoDB采用的是键值对存储方式,数据以JSON格式(BSON)存储,这使得数据的读写更加自然和高效。MongoDB支持丰富的查询语法,包括字段选择、条件操作、排序和分组,为开发者...

    MongoDB基础入门到高级进阶

    小白也可入门学习,如果有一些MySQL、Js经验最佳,Java代码案例部分需要有一定的Java开发基础。 3、课程亮点 系统的学习MongoDB从入门到进阶,掌握现在火爆的NoSQL技术之一。 选择MongoDB的原因及其优势 MongoDB单机...

    MongoDB、Java与对象关系映射

    ### MongoDB、Java与对象关系映射 #### MongoDB简介与特性 MongoDB作为一种强大的NoSQL数据库,在处理非结构化数据方面有着显著的优势。它通过使用JSON(JavaScript Object Notation)格式来存储和检索数据,简化...

    主流NOSQL数据库之MongoDB快速入门.docx

    ### MongoDB 快速入门知识点详解 #### 一、MongoDB简介与特点 - **定义**:MongoDB是一款基于分布式文件存储的非关系型数据库(NoSQL),由C++语言开发,设计初衷是为了满足Web应用程序对高性能及可扩展性的需求。 ...

    mongoDB(含java版本和spring整合版+图形界面工具及说明文档)

    - MongoDB提供了Java驱动程序,使得Java开发者可以方便地在Java应用中使用MongoDB。它提供了连接管理、查询构建、数据操作等功能。 - Java驱动程序通过MongoClient对象与MongoDB服务器建立连接,然后通过Database...

    MongoDB入门笔记

    MongoDB支持JavaScript语法,可以在数据库层面执行脚本,这使得其与后端开发语言(如Java)的集成变得更为便捷。 在MongoDB中,数据的基本单位是文档(Document),类似于传统数据库的行。文档由多个字段(Field)...

    超高性价比的 MongoDB 快速入门教程

    在“超高性价比的 MongoDB 快速入门教程”中,我们将深入探讨 MongoDB 的核心特性,包括流式聚合操作、语句执行效率、复制集、水平扩展、数据备份与还原以及访问控制。 1. **流式聚合操作** 流式聚合允许开发者...

    mongodb driver for java 源码

    MongoDB Java驱动程序是Java开发者用来与MongoDB数据库进行交互的官方库。源码分析将帮助我们深入理解其内部工作原理,优化应用性能,并有可能自定义功能以满足特定需求。以下是对MongoDB Java驱动2.5.3版本源码的...

    MongoDB教程基础入门

    教程名称:MongoDB教程基础入门 课程目录:【】MongoDB教程基础入门-代码【】MongoDB教程基础入门01第一讲上【】MongoDB教程基础入门02第一讲下【】MongoDB教程基础入门03第二讲上【】MongoDB教程基础入门04第二讲...

    MongoDB快速入门

    ### MongoDB快速入门知识点详解 #### 一、MongoDB简介 **MongoDB** 是一款非常流行的开源文档型数据库管理系统,以其高性能、高可用性以及灵活的数据模型而受到广泛欢迎。相较于传统的关系型数据库如 MySQL,...

    MongoDB入门指南.pdf

    MongoDB入门指南 MongoDB是一种开源的文档类型数据库,它具有高性能、可扩展、高可用、自动收缩等特性。MongoDB能够避免传统的ORM映射,从而有助于开发。MongoDB中的每一行记录就是一个文档,它是一个由键值对构成...

    windows 64位mongodb安装包+java api文档

    总的来说,这个压缩包提供了在Windows 64位环境下快速部署MongoDB的基础,并为Java开发者提供了详细的API参考,使他们能够高效地利用MongoDB进行数据存储和处理。在实际开发中,结合这个安装包和API文档,你将能够...

    mongodb_java_2.6_API

    本篇将深入探讨"mongodb_java_2.6_API",即MongoDB 2.6版本的Java驱动程序API,了解如何使用Java进行MongoDB的开发。 1. **MongoDB Java驱动程序概述** MongoDB的Java驱动程序是Java开发者与MongoDB服务器通信的...

    MongoDB入门到精通 中文资料

    Mongo DB ,是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式,备受当前IT从业人员的青睐。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。...

    MongoDB spring hibernate java 集成demo

    MongoDB spring hibernate java 集成demo

    mongodb的java驱动包

    这是一个java的mongodb的驱动包,使用它就能够与用java去连接mongodb服务器,和操作mongodb

Global site tag (gtag.js) - Google Analytics