java使用mongodb问题集

1.js和java语言差异性:

问题:

由于mongo是 一个js引擎,而很多目前应用采用的是java开发,由于js并非强语言类型,导致写入的json中如果包含数字时就会出现问题。

js认为数字是number类型,换言之,js的number类型对应的强类型语言的float,导致如果写入一个数据,用java转换为整形时会失败。

解决:

禁止使用js更新mongodb,sa在使用时只允许查询,不允许修改和添加

 

2.查询mongodb复制集没有分布读压力:

问题:

mongodb replicate sets架构,设置认证,开启slaveOk(),所有的读并没有分配到对应的secondary

解决:

由于mongodb自由在运行时设置的slaveOk()才有效,退后后就得重新设置。

因此在java代码中需要明确说明是否使用从库读,代码如下:

 

mongo.setReadPreference(ReadPreference.SECONDARY); 或者 db.setReadPreference(ReadPreference.SECONDARY); 或者更细力度,按自己需求定

 

3.maxBsonObjectSize

在应用开发时,我们往往可能设置进文档(document)的大小不一,但是mongodb服务器端设置了文档大小,对于早期版本是4M,对于后来设置为16M。

而驱动默认为4M,如果从服务器中获取过来数据,那么采用服务器端的数据。

java驱动获取最大bson数据代码如下:

int fetchMaxBsonObjectSize() { if (_masterPortPool == null) return 0; DBPort port = _masterPortPool.get(); try { CommandResult res = port.runCommand(_mongo.getDB("admin"), new BasicDBObject("isMaster", 1)); // max size was added in 1.8 if (res.containsField("maxBsonObjectSize")) { _maxBsonObjectSize.set(((Integer) res.get("maxBsonObjectSize")).intValue()); } else { _maxBsonObjectSize.set(Bytes.MAX_OBJECT_SIZE); } } catch (Exception e) { _logger.log(Level.WARNING, "Exception determining maxBSONObjectSize ", e); } finally { port.getPool().done(port); } return _maxBsonObjectSize.get(); }
获取的maxBsonObjectSize的数据,只要修改服务器端的这个数据即可。

具体设置如下:

 

 

 

------
author: madding.lip
date: 2012.02.09

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值