【问题标题】:Exception when storing large BasicDBObject to mongodb with java使用 java 将大型 BasicDBObject 存储到 mongodb 时出现异常
【发布时间】:2011-07-13 07:44:46
【问题描述】:

我想在 mongoDB 中存储大对象,但在持久保存大对象时出现错误(字节 [] 可能 > 5MB)。是否可以以这种方式存储数据?在 DB 上调用“insert”时,我总是遇到异常“java.lang.IllegalArgumentException: object too big: 4821537”...

片段:

private byte[] persistObject(String id, byte[] value){

    BasicDBObject doc = new BasicDBObject();
    doc.append("id", id);
    doc.append("value", value); // may be really huge! > 5MB of size

    try {
        getObjectCollection().save(doc);
    } catch (MongoException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return value;
}

堆栈跟踪:

java.lang.IllegalArgumentException: object too big: 4821537
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:217)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:180)
at com.mongodb.DBCollection.insert(DBCollection.java:72)
at com.mongodb.DBCollection.save(DBCollection.java:537)
at com.mongodb.DBCollection.save(DBCollection.java:517)

感谢您的帮助/提示 :)

【问题讨论】:

    标签: java mongodb object store nosql


    【解决方案1】:

    我认为你的 mongodb 版本是 1.6。MongoDB 中的 BSON 对象大小有限(4MB)。请升级 mongodb 版本到 1.7+ 。 v1.7/1.8 16MB,未来会更高。

    【讨论】:

    • 我的版本是 db version v1.6.5,因为这是生产版本。我不确定我是否应该在我的项目中使用不稳定的开发版本...您会推荐任何其他带有 java 接口的好的 no-sql db 吗?
    • 我看到了mongodb的jira。1.8 rc2是release的。没有严重的bug。你可以试试。其他的建议是membase和redis。稳定,性能好。
    • 我试过你提到的mongodb版本。有用!但是你必须使用最新的 java-driver(2.5 版)来存储大对象。 2.4 版不存储它们并且也抛出异常。感谢您的帮助!
    • 没关系~。最新的 java-driver 已经支持新的 Mongo 1.8 特性,比如对结果的高级后处理(替换、合并、减少、内联)。好消息!~
    • 1.8 的对象 (bson) 限制是什么?在哪里可以找到它们?为什么存在对象(bson)限制?
    猜你喜欢
    • 2017-07-08
    • 2011-02-16
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 2018-11-01
    • 2012-07-28
    相关资源
    最近更新 更多