【发布时间】:2023-03-19 14:02:02
【问题描述】:
我使用ReactiveMongo 作为 Akka-Http、Akka-Streams 项目的连接器。我正在创建如下所示的 MongoConnection,但数据库中的数据是使用 Snappy 压缩的。无论我在哪里看,在 ReactiveMongo 文档中都找不到任何关于压缩支持的内容。当我尝试使用带有compressors=snappy 标志的URL 连接到Mongo 数据库时,它返回异常。
我查看了源代码,确实似乎根本没有提到压缩支持。在这一点上,我愿意接受一个黑客工作。
谁能帮帮我?
MongoConnection.fromString("mongodb://localhost:27017?compressors=snappy").flatMap(uri => driver.connect(uri))
例外:
23:09:15.311 [default-akka.actor.default-dispatcher-6] ERROR akka.actor.ActorSystemImpl - Error during processing of request: 'The connection URI contains unsupported options: compressors'. Completing with 500 Internal Server Error response. To change default exception handling behavior, provide a custom ExceptionHandler.
java.lang.IllegalArgumentException: The connection URI contains unsupported options: compressors
at reactivemongo.api.AsyncDriver.connect(AsyncDriver.scala:227)
at reactivemongo.api.AsyncDriver.connect(AsyncDriver.scala:203)
at reactivemongo.api.AsyncDriver.connect(AsyncDriver.scala:252)
如果你需要一个可行的例子,你可以试试这个: (您实际上并不需要在本地运行 MongoDB 容器来引发错误)
object ReactiveMongoCompressorIssue extends App {
import scala.concurrent.Await
import scala.concurrent.duration._
implicit val actorSystem = ActorSystem("ReactiveMongoCompressorIssue")
implicit val dispatcher: ExecutionContextExecutor = actorSystem.dispatcher
final val driver = AsyncDriver()
val url = "mongodb://localhost:27017/?compressors=snappy"
val connection = Await.result(MongoConnection.fromString(url).flatMap(uri => driver.connect(uri)), 3.seconds)
assert(connection.active)
}
【问题讨论】:
-
不,没有这样的选项。压缩器选项不压缩数据库,而是通过网络压缩消息。 DB 压缩在 DB 选项中管理,而不是在驱动程序端。近期不计划支持网络压缩。
-
您想要哪种压缩方式,在客户端和服务器之间的网络上或服务器存储的数据上?
-
我需要 Snappy 压缩支持。
-
数据是如何压缩的?
标签: mongodb scala akka akka-stream reactivemongo