此时我将数据序列化为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只读
答案 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。