我有一台运行在具有16GB内存的VPS上的Mongo服务器(尽管可能使用磁盘的IO速度很慢).
我有大约3500万条记录的集合,这些记录不适合主内存(db.stats()报告size35GB和storageSize14GB),但报告的1.7GB记录totalIndexSize应该适合那里.
有一个特定的领域,bg我正在查询哪些可以存在有价值true或完全缺席(请不要讨论这是否是最好的数据表示 - 我仍然认为Mongo表现得很奇怪).此字段使用非稀疏索引编制索引,报告大小为146MB.
我正在使用具有默认缓存大小的WiredTiger存储引擎(所以它应该是大约8GB).
我正在尝试计算缺少该bg字段的记录数.
计true数值相当快(几秒钟):
> db.entities.find({bg: true}).count()
8300677
Run Code Online (Sandbox Code Playgroud)
但是,对缺失值的查询非常慢(大约5分钟):
> db.entities.find({bg: null}).count()
27497706
Run Code Online (Sandbox Code Playgroud)
在我眼里,explain()看起来不错:
> db.entities.find({bg: null}).explain()
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "testdb.entities",
"indexFilterSet" : false,
"parsedQuery" : {
"bg" : {
"$eq" : null
}
},
"winningPlan" : {
"stage" : "FETCH",
"filter" : {
"bg" : {
"$eq" : null
}
}, …Run Code Online (Sandbox Code Playgroud) 我正在编写一个依赖于代码(让我们称之为foo.jar)的库,它只能作为二进制 jar 使用。按照标准,我将它放在lib/目录中,以便 SBT 将其视为非托管依赖项。到目前为止这很好。
但是,由于这是一个库,我希望能够发布它,以便依赖它的其他项目也可以访问非托管代码,foo.jar而无需手动定位它。我最初认为我可以使用诸如SBT Assembly 之类的胖 jar 插件来创建具有依赖项的 jar,但这并不影响实际发布的内容sbt publish-local——它只会在您运行sbt assembly. 有没有一些标准的简单方法来处理这个问题?对于每个使用非托管依赖项在下游其他项目使用时中断的库来说,这似乎是一个坏主意,所以我想知道我是否遗漏了一些明显的东西。