0

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

4

2 回答 2

2

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

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

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

于 2013-07-01T14:29:27.950 回答
1

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

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

于 2013-06-20T07:25:22.350 回答