将数据写入原始BSON

时间:2013-06-20 06:36:00

标签: java mongodb bson

此时我将数据序列化为BasicDBObject。 MongoDB将其转换为BSON并将其发送到服务器。

如何手动将数据写入BSON以避免二次序列化?

http://api.mongodb.org/java/current/com/mongodb/BasicDBObject.html只扩展了HashMap

http://api.mongodb.org/java/current/com/mongodb/RawDBObject.html只读

2 个答案:

答案 0 :(得分:2)

直接写入BSON的唯一方法是自己编写字节缓冲区,并通过网络将它们发送到服务器。由于这是Java驱动程序的主要工作,因此如果使用驱动程序和BasicDBObject,则使用MongoDB进行通信的可能性要小得多。

使用BasicDBObject是Java驱动程序中最优化的路径,因此如果您认为性能对您来说是一个问题,我建议您提出您的性能要求(是您感兴趣的吞吐量或延迟?您的目标是什么数字?)并使用Java驱动程序和您自己的序列化编写适当的性能测试。

JVM非常智能,它将优化程序中最常用的代码路径。您可能会发现HotSpot优化了您的程序和Java驱动程序,因此您编写自己的序列化没有任何优势。

答案 1 :(得分:1)

看看BasicDBObject.java。您放入的任何数据都不会立即序列化为BSON,而只是作为对现有Java对象的引用而收集。不应该在BSON序列化上花费重复的工作。

如果您仍想手动生成自己的BSON,可能需要在此处修改或子类化一个或多个类型:https://github.com/mongodb/mongo-java-driver/tree/master/src/main/com/mongodb