此时我将我的数据序列化为 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是只读的
此时我将我的数据序列化为 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是只读的
直接写入 BSON 的唯一方法是自己写入字节缓冲区,然后通过网络将它们发送到服务器。由于这是 Java 驱动程序的主要工作,因此如果您使用驱动程序和 BasicDBObject,与 MongoDB 通信时出现错误的可能性要小得多。
使用 BasicDBObject 是 Java 驱动程序中最优化的路径,所以如果你认为性能对你来说是个问题,我建议你提出你的性能要求(你感兴趣的是吞吐量还是延迟?数字是多少?您的目标是什么?)并使用 Java 驱动程序和您自己的序列化编写适当的性能测试。
JVM 非常智能,并且会优化程序中最常用的代码路径。您可能会发现 HotSpot 优化了您的程序和 Java 驱动程序,因此您编写自己的序列化没有任何优势。
看看BasicDBObject.java。您放入其中的任何数据都不会立即序列化为 BSON,而只会作为对现有 Java 对象的引用而收集。不应该在 BSON 序列化上花费重复的工作。
如果您仍想手动生成自己的 BSON,您可能正在考虑修改或子类化一种或多种类型:https ://github.com/mongodb/mongo-java-driver/tree/master/src/main /com/mongodb .