`
ppxieppp
  • 浏览: 50700 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

java连接mongo

 
阅读更多

 


一、连接方式:

1、单台服务器或主从模式:

 

  1. Mongo mongo1 = new Mongo( "127.0.0.1" );
  2. Mongo mongo2 = new Mongo( "127.0.0.1", 27017 );
  3. Mongo mongo3 = new Mongo( new DBAddress( "127.0.0.1", 27017, "test" ) );
  4. Mongo mongo4 = new Mongo( new ServerAddress( "127.0.0.1") );

四种方式均可,默认的链接端口是27017。

2、复制集模式链接:
请注意,单台机器上配置的复制集最好使用真实ip初始化和链接,不建议使用127.0.0.1或者localhost,否则容易链接不上,详见此篇blog

 

  1. static Mongo m = null;
  2. static{
  3. try {
  4. List<ServerAddress> list= new ArrayList<ServerAddress>();
  5. ServerAddress sap0 = new ServerAddress("192.168.132.100",20011);
  6. ServerAddress sas1 = new ServerAddress("192.168.132.100",20012);
  7. ServerAddress sas2 = new ServerAddress("192.168.132.100",20013);
  8. list.add(sap0);
  9. list.add(sas1);
  10. list.add(sas2);
  11. m = new Mongo(list);
  12. } catch (UnknownHostException e) {
  13. // TODO Auto-generated catch block
  14. e.printStackTrace();
  15. }
  16. }


二、连接选项:
mongo-java-driver中提供了一个类MongoOption,用于初始化链接参数,主要有一下这些:
1、常规选项:
①、
connectionsPerHost:单个主机连接到mongo实例允许的最大连接数。这其实相当于c3p0的maxPoolSize参数,mongo是内建连接池的,功能跟c3p0等差不多,超过了就会新建链接,默认值是10,大并发的话较小。
②、threadsAllowedToBlockForConnectionMultiplier:这个参数是跟connectionsPerHost配套的,当连接数超过connectionsPerHost的时候,需要建立新的连接,连接请求会被阻塞,这个参数就代表允许阻塞请求的最大值,超过这个值之后的请求都会报错。默认值5。
③、
maxWaitTime:线程等待链接可用的最长时间,ms单位,默认120,000,两分钟。
④、connectTimeout:建立链接的超时时间。默认为10,000,10s(2.9.0)
⑤、
socketTimeout:执行io操作的超时时间,默认为0,代表不超时。
⑥、
socketKeepAlive:为防火墙设置的,保证socket存活。默认false。
⑦、
autoConnectRetry:自动重连,连接池都有的参数。但是在mongo里显的比较鸡肋,不管设置false还是true,mongo-java-driver本身就有重连机制,而且当是复制集的情况下,如果主库宕机,他只会重连宕机机器的ip,我不知道这个是怎么处理的,以后看源码吧,默认false,看来本来也不建议打开。

ps:(2012-09-28)今天机房发生网络波动,导致连接数暴增,应该跟自动重连是有关系的,mongo的访问量较大,在网络波动的情况下极易放生这种情况,看来这个自动重连也需要改进。
⑧、
maxAutoConnectRetryTime:我去,坑爹啊,竟然是时间!默认为0,代表15s。。。咋想的。
⑨、
slaveOk:用于读写分离,废弃了(mongo2.0/driver2.7),详见Mongo读写分离
使用:
2、特殊选项:
Driver对数据库的写操作分几个安全级别,均是通过
WriteConcern类控制,在MongoOption中定义了WriteConcern中使用的全局参数。
①、
WriteConcern中的几个安全级别:

 

  1. /** No exceptions are raised, even for network issues */
  2.     public final static WriteConcern NONE = new WriteConcern(-1);

  3.     /** Exceptions are raised for network issues, but not server errors */
  4.     public final static WriteConcern NORMAL = new WriteConcern(0);

  5.     /** Exceptions are raised for network issues, and server errors; waits on a server for the write operation */
  6.     public final static WriteConcern SAFE = new WriteConcern(1);

  7.     /** Exceptions are raised for network issues, and server errors; waits on a majority of servers for the write operation ,waits for more than 50% of the configured nodes to acknowledge the write (until replication is applied to the point of that write)
    */
  8.     public final static WriteConcern MAJORITY = new Majority();

  9.     /** Exceptions are raised for network issues, and server errors; the write operation waits for the server to flush the data to disk*/
  10.     public final static WriteConcern FSYNC_SAFE = new WriteConcern(true);

  11.     /** Exceptions are raised for network issues, and server errors; the write operation waits for the server to group commit to the journal file on disk*/
  12.     public final static WriteConcern JOURNAL_SAFE = new WriteConcern( 1, 0, false, true );

  13.     /** Exceptions are raised for network issues, and server errors; waits for at least 2 servers for the write operation*/
  14.     public final static WriteConcern REPLICAS_SAFE = new WriteConcern(2);
NONE的级别最低,不管出了啥事儿,客户端一股脑的往mongo插入,连网络断了都不管。REPLICAS_SAFE的级别最高,他要等从库都同步完才返回给客户端插入成功,复制集的话要至少两台同步完才行,分布式事务啊,牛叉,但是,它没有事务。。。开玩喜了。
②、参数解释:
WriteConcern的初始化函数,一通重载之后调用:

 

  1. public WriteConcern( int w , int wtimeout , boolean fsync , boolean j, boolean continueOnInsertError){
  2.         _w = w;
  3.         _wtimeout = wtimeout;
  4.         _fsync = fsync;
  5.         _j = j;
  6.         _continueOnErrorForInsert = continueOnInsertError;
  7.     }
这个函数指定写操作需要等待的server的数量和抛出异常的行为。
w:代表server的数量:。
w=-1 不等待,不做异常检查
w=0 不等待,只返回网络错误
w=1 检查本机,并检查网络错误
w>1 检查w个server,并返回网络错误
wtimeout
:写操作超时的时间。
fsync 
:是不是等待刷新数据到磁盘,参见FSYNC_SAFE的注释。
j:是不是等待提交的数据已经写入到日志,并刷新到磁盘,参见JOURNAL_SAFE的注释。
MongoOption中有全局的设置。还有一个

safe
:相当于w=1,wtimeout=0,fsync和j为false,如果这几个指定了,safe不起作用。参见SAFE的注释

三、MongoOption的使用:

 

  1. MongoOptions op = new MongoOptions();
  2. op.safe=true;
  3. op.connctionPerHost=50;
  4. op.connctionTimeout=120000;
  5. ....
  6. //list是serverAddress的列表
  7. Mongo m = new Mongo(list,op);
WriteConcern设置好之后用

 

  1. m.setWriteConcern(wc);

调用
分享到:
评论

相关推荐

    java连接mongo所需的3个jar包

    本篇文章将详细讲解如何使用Java连接MongoDB,以及所需的三个关键jar包。 首先,我们需要了解Java MongoDB驱动程序,它是一个允许Java应用程序与MongoDB服务器通信的库。这个驱动程序由MongoDB公司官方维护,提供了...

    Java连接mongoDB需要的jar包

    本篇文章将详细讲解如何使用Java连接MongoDB,以及涉及到的关键JAR包的作用。 首先,我们来看一下标题中提到的三个关键JAR文件: 1. **bson-3.6.4.jar**:这是BSON库的JAR文件,全称为Binary JSON。BSON是一种数据...

    Mongodb的并发访问性能测试的java客户端

    MongoDB Java驱动程序是连接Java应用程序与MongoDB服务器的关键组件。它提供了丰富的API,允许开发者进行CRUD(创建、读取、更新和删除)操作。为了实现并发访问,客户端可能使用了`MongoClient`类来建立与MongoDB...

    java针对mongo操作的封装,完全面向对象,无需修改,可直接使用

    完全面向对象的mongo封装,maven工程源码,可直接install导出jar包引用,支持基本的增删改查和分页等,使用反射对javaBean实体进行映射,所有方法参数只需要传javaBean就行了,支持带密码连接,即拿即用,无需修改。

    mongo-java-driver-2.10.1-sources.jar

    mongo是一款优秀的大数据处理数据库,内部以json格式存储,使用方便,该资源为java连接mongo所需驱动包

    Java操作mongo

    在Java中与MongoDB进行交互主要依赖于官方提供的Java驱动程序,这在给定的文件列表中体现为`mongo-2.8.0.jar`,这是一个MongoDB的Java驱动程序库。 首先,让我们了解一下如何在Java项目中引入MongoDB的Java驱动。在...

    经过改造的mongo-java-driver-2.14.3.jar.zip

    在这个特定的场景中,我们讨论的是一个经过改造的`mongo-java-driver-2.14.3.jar.zip`文件,它被优化以适应在Kettle(Pentaho Data Integration)环境中使用,特别是与包含用户认证的MongoDB实例进行交互。...

    mongo-java-driver-3.4.3,java连接mongodb的jar包驱动包

    mongo-java-driver-3.4.3.jar 是 MongoDB 官方为 Java 开发者提供的 Java 驱动程序的一个特定版本(3.4.3)。这个 JAR 文件包含了与 MongoDB 数据库进行交互所需的类和接口,允许 Java 应用程序连接到 MongoDB 实例...

    java 执行cmd命令及mongodb脚本

    `mydb`是你要连接的数据库,`script.js`是包含JavaScript命令的文件。 2. MongoDB命令行: 在MongoDB shell中,可以直接输入JavaScript命令,例如创建集合、插入文档等: ```javascript use mydb; // 切换到mydb...

    java mongo API

    Java MongoDB API还提供了许多高级功能,如副本集支持、连接池、异步驱动等,可以根据实际需求选择使用。通过熟练掌握这些基础知识,你将能够高效地利用Java与MongoDB进行数据交互。在实践中,不断学习和探索MongoDB...

    java MongoDB查询数据导出为excel表格

    1.java连接mongo数据库查询统计信息导出为excel表格 2.所有连接参数都可以动态输入,参数包括:ip、端口、数据库名称、集合名称、查询参数(公众号,写在指定文件中),导出表格存放位置

    java操作mongo的小例子

    在提供的压缩包文件“mongoTest”中,可能包含了演示这些操作的完整Java代码示例,或者是一个运行环境,如一个简单的Java应用程序,用于展示如何连接MongoDB、执行查询以及执行其他数据库操作。你可以解压并运行这个...

    mongo-java-driver最新jar.zip

    mongo-java-driver3.0以上jar压缩包大全 try { //1.连接池相关选项配置 MongoClientOptions options=MongoClientOptions.builder() .connectionsPerHost(poolSize) .minConnectionsPerHost(minpoolsize) ...

    java连接Mongodb进行增删改查_java连接Mongodb进行增删改查_curiousjop_depthklb_Mong

    本篇文章将详细讲解如何使用Java连接到MongoDB数据库,并进行基本的增删改查操作。 首先,连接MongoDB需要引入MongoDB的Java驱动程序。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org....

    mongo-java-driver-3.11.2.jar

    mongo-java-driver-3.11.2,用于java项目连接mongoDB作为类似JDBC一样使用,同时可以作为其它java程序连接mongoDB的工具

    mongo-java-driver-3.2.2

    在"mongo-java-driver-3.2.2"这个版本中,我们探讨的是一个关键的中间件,它允许Java应用程序充分利用MongoDB的功能,包括数据存储、查询、更新以及删除操作。 MongoDB是一个流行的NoSQL数据库系统,以其灵活性、高...

    mongo-java-driver-3.2.2.jar.zip

    MongoDB是一个流行的开源、文档型数据库系统,而`mongo-java-driver`是官方提供的Java API,允许开发者在Java应用程序中执行各种数据库操作,如读取、写入、查询等。 在本例中,我们讨论的是`mongo-java-driver`的...

    MongoDemo:在 Java 应用程序中连接 MongoDB 并为初学者从 Code 启动 MongoDb 服务器

    用 Java 连接 MongoDB关于 Mongo DB: MongoDB 是一个跨平台、面向文档的数据库,提供高性能、高可用性和易于扩展。 MongoDB 致力于集合和文档的概念。数据库: 数据库是集合的物理容器。 每个数据库在文件系统上都...

    java操作 mongo DB 数据库例子

    这篇博客"java操作mongo DB数据库例子"提供了使用Java与MongoDB交互的示例代码,对于学习如何在Java应用中集成MongoDB非常有帮助。MongoDB的主要优势包括灵活的数据模型、高性能以及易于扩展性。 首先,我们需要...

    java连接mongodb的jar包(mongo-2.5.3.jar)

    java连接mongodb的jar包(mongo-2.5.3.jar)

Global site tag (gtag.js) - Google Analytics