WiredTiger引擎的最大数据库大小是多少?
MongoDB手册中只有MMAPv1的最大数据库大小,如下所示.
http://docs.mongodb.org/manual/reference/limits/
我对以下查询运行解释:
db.explain().find({ site_id:1, dimensions:[], create_date: { $gte: new Date(1452603948196) } )
Run Code Online (Sandbox Code Playgroud)
结果在维度字段上包含一个“过滤器”对象,而它应该使用索引过滤该字段,这是什么意思?这不是一个多余的阶段吗?
{ "winningPlan" : {
"stage" : "FETCH",
"filter" : {
"dimensions" : {
"$eq" : [ ]
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"site_id" : 1,
"dimensions" : 1,
"create_date" : 1
}, }
Run Code Online (Sandbox Code Playgroud)
据我了解,这意味着 mongo 在扫描索引并将文档提取到内存中后再次过滤维度字段,是否正确?
谢谢,
我们需要释放一些 MongoDB 空间,并且我们确定了可以从集合中安全删除的超过 100Gb 的文档。
因此,我们将它们从具有以下设置的测试环境中删除:
完成后,我们发现磁盘上的空间仍然被使用,需要回收。我们找到了这篇文章,它对我们有帮助:运行完两者后
db.runCommand({repairDatabase: 1})
Run Code Online (Sandbox Code Playgroud)
和
db.runCommand({compact: collection-name })
Run Code Online (Sandbox Code Playgroud)
我们释放了 100Gb 以上。
然后我们继续生产,忘记了设置是不同的,因为我们有 1 个副本节点:
删除文档后,我们运行
db.runCommand({repairDatabase: 1})
Run Code Online (Sandbox Code Playgroud)
并收到OK消息(过了一会儿,10 分钟以上)。我们尝试跑步
db.runCommand({compact: collection-name })
Run Code Online (Sandbox Code Playgroud)
并得到这个错误:
不会在活动副本集主节点上运行紧凑型操作,因为这是一个缓慢的阻塞操作。用力:真实用力
所以我们跑
db.runCommand({compact: collection-name, force: true })
Run Code Online (Sandbox Code Playgroud)
并收到“确定”消息(几乎立即),但空间上的磁盘仍然被使用,它没有被释放。
我们寻找使用副本集运行repairDatabase和compact命令的解决方案,但建议的重点是避免停机,就好像这是唯一的问题一样。但是,我们可以安排停机时间,但我们的问题是命令无法按预期工作,因为空间实际上并未被回收。
我们做错了什么?
我注意到在看似相同的总体上存在巨大的性能差异,至少在概念上是这样。测试是在一个简单的集合结构上进行的,该结构有一个 _id、一个名称和一个createdAt,但其中有 2000 万个。在createdAt上有一个索引。它托管在 mlab 集群上,版本为 3.6.9 WiredTiger。
我正在尝试使用聚合进行简单的分页,我知道我可以使用查找和限制,但我喜欢向管道添加更多元素,我给出的示例非常精炼。
db.getCollection("runnablecalls").aggregate([
{
$facet: {
docs: [
{ $sort: {createdAt: -1} },
{ $limit: 25 },
{ $skip: 0 },
],
page_info: [
{ $group: { _id: null, total: { $sum: 1 } }
}
],
}
}
])
Run Code Online (Sandbox Code Playgroud)
这几乎需要40s. 现在,如果我将$sort和移到$limit刻面之外,则需要0.042s.
db.getCollection("runnablecalls").aggregate([
{ $sort: {createdAt: -1} },
{ $limit: 25 },
{
$facet: {
docs: [
{ $skip: 0 },
],
page_info: [
{ …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用wiredTiger引擎在MongoDB 3.0中启用数据压缩.压缩在服务器级别工作正常,我可以为mongo服务器配置文件中的所有集合提供全局压缩算法,如下所示:
storage:
engine: wiredTiger
wiredTiger:
collectionConfig:
blockCompressor: zlib
Run Code Online (Sandbox Code Playgroud)
我想在集合级别启用此压缩,这可以通过使用mongodb shell中的以下代码来完成:
db.createCollection( "test", {storageEngine:{wiredTiger:{configString:'block_compressor=zlib'}}} );
Run Code Online (Sandbox Code Playgroud)
如何使用pymongo驱动程序执行此操作?
from pymongo import MongoClient
client = MongoClient("localhost:27017")
db = client.mydb
Run Code Online (Sandbox Code Playgroud) 我可以配置WiredTiger存储引擎中MongoDB 3.0.0引入的配置选项的最小cacheSizeGB数是多少?
代表多少cacheSizeGB必须是整数?是否可以使用15.5这样的浮点数进行配置?
我无法从MongoDB官方文档中找到详细信息。
我有一个用户集合.每个用户都有一个经常更新的字段"地理位置"(每次用户显着移动时).由于我希望在更新时在文档级别而不是集合级别上进行并发,因此我使用的是WiredTiger存储引擎.
我了解到,使用WiredTiger,文档中的每次更新都会导致创建新文档:
http://learnmongodbthehardway.com/schema/wiredtiger/
WiredTiger不支持就地更新
但是,本文还说"即使[WiredTiger]不允许就地更新,它仍然可以比许多工作负载的MMAP表现更好 ".这是什么意思?当我使用WiredTiger时,我必须注意哪些具体含义?例如,如果没有就地更新,数据库大小会快速增长吗?还有其他需要注意的事项吗?
我还了解到MongoDB 3.6中的WiredTiger增加了存储增量的功能,而不是重写整个文档(https://jira.mongodb.org/browse/DOCS-11416).这究竟是什么意思?
注意:另外我不明白的是,现在大多数(如果不是全部)硬盘驱动器的扇区大小为4096字节,因此您不能仅向硬盘驱动器写入4个字节(例如),而是必须写入完整块4096字节(首先读取它,更新它中的4个字节,然后写入).由于大多数文档通常<4096字节,这意味着在任何情况下都需要重写整个文档(即使使用MMAP).我错过了什么?
我并不完全理解这两个功能在(WiredTiger)MongoDB程序中如何相互关联:
1)WiredTiger快照
2)数据锁定
如果使用WiredTiger引擎的每次读取操作在读取时都提供了数据库级别"快照"(以便创建一致性(ACID中的C),为什么我们还需要锁定?让我们使用一个示例.
我在文档级别执行查询(读取操作).好的,所以我知道我得到了数据库级别的快照,所以我的数据是一致的,即使另一个用户同时写入同一个文档,更新它.
那么在这一点上,在该文档上使用Shared-Lock有什么用处,它会阻止对该文档的所有写入(独占)操作,直到发布共享锁定为止?在我阅读文档的同时写入该文档可能会出现什么问题,如果我实际上使用了在阅读时提供给我的文档快照?为什么我会关心文件在阅读操作期间是否被锁定?我已经从那个时间点得到了(一致的)数据,不是吗?
我显然在这里错过了一个关键概念......任何帮助?
谢谢.
我们可以使用WiredTiger引擎创建一个集合type=lsm,但是MongoDB文档中没有提到这个功能:
db.createCollection(
"test",
{ storageEngine: { wiredTiger: {configString: "type=lsm"}}}
)
Run Code Online (Sandbox Code Playgroud)
一旦插入一些文档并添加索引,WiredTiger 似乎确实创建了 LSM 文件。
db.test.insert([
{ value: 1},
{ value: 2},
{ value: 3}
]) // Done in 16:04
db.test.createIndex(
{ value: 1 },
{ storageEngine: { wiredTiger: {configString: "type=lsm"}}}
) // Done in 19:59
Run Code Online (Sandbox Code Playgroud)
$ ls -ltr
...
-rw-r--r--. 1 mongod mongod 16384 Jan 15 16:04 collection-0-1708338433081558809-000002.lsm
-rw-r--r--. 1 mongod mongod 16384 Jan 15 16:04 index-1-1708338433081558809.wt
-rw-r--r--. 1 mongod mongod 16384 Jan 15 19:59 index-3-1708338433081558809-000002.lsm
Run Code Online (Sandbox Code Playgroud)
集合和索引value_1 …
编辑:这个问题不是关于vanilla MongoDB的,show collections而是关于mongo-hacker.查看已接受的答案和评论.
使用Mongo DB 3.2 + WiredTiger,show collections显示两种尺寸:s1/s2.
show collections
coll_1 ? 10.361MB / 1.289MB
coll_2 ? 0.000MB / 0.004MB
coll_3 ? 0.000MB / 0.016MB
coll_4 ? 0.001MB / 0.031MB
Run Code Online (Sandbox Code Playgroud)
我的猜测是:
它是否正确?我在文档中找不到任何参考.
我们已经实现了MongoDB主从复制,数据库被删除了。
我们使用extundelete命令从 Mongo 数据目录中恢复了已删除的文件。
取消删除博客 https://github.com/RIKSOF/development/wiki/Restoring-deleted-files-on-Linux
我们想要恢复至少一个我们获得 WT(有线计时器)文件的集合。我们正在尝试使用以下命令恢复该文件,但出现以下错误
从损坏的 MongoDB 安装中恢复 WiredTiger 集合
wget http://source.wiredtiger.com/releases/wiredtiger-2.7.0.tar.bz2
tar xvf wiredtiger-2.7.0.tar.bz2
cd wiredtiger-2.7.0
sudo apt-get install libsnappy-dev build-essential
./configure --enable-snappy
make
./wt -v -h ../mongo-bak -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" -R salvage collection-2657--1723320556100349955.wt
错误 -
./wt -v -h ../mongo-bak -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" -R salvage collection-246--7553069514495955510.wt
[1488888117:36780][13536:0x7f7b633cd740], file:WiredTiger.wt, connection: read checksum error for 4096B block at offset 12288: block header checksum of 1955562709 doesn't match expected checksum of 3146787951
[1488888117:36809][13536:0x7f7b633cd740], file:WiredTiger.wt, connection: WiredTiger.wt: encountered an illegal …
我正在阅读有线电视的代码.我看到一个函数定义
WT_CURSOR::set_key(WT_CURSOR * cursor, ...)
"......"在这里意味着什么?编译器如何编译这样的代码?
谢谢
我有以下docker-compose文件:
version: "3"
services:
#
# APIs
#----------------------------------------------
pokerstats:
image: pokerstats
container_name: pokerstats
ports:
- 8080:8080
depends_on:
- db
#
# Utilities
#----------------------------------------------
db:
image: mongo
container_name: mongo
volumes:
- ./data/db:/data/db
ports:
- "27018:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin
MONGO_INITDB_DATABASE: pokerStats
Run Code Online (Sandbox Code Playgroud)
在我添加volumes. 但是当我运行时不是:docker-compose up -dmongo 容器立即停止,在日志中我看到错误:
2020-04-10T19:17:17.313+0000 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=1457M,cache_overflow=(file_max=0M),session_max=33000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000,close_scan_interval=10,close_handle_minimum=250),statistics_log=(wait=0),verbose=[recovery_progress,checkpoint_progress],
2020-04-10T19:17:17.772+0000 E STORAGE [initandlisten] WiredTiger error (1) [1586546237:772524][29:0x7fe9f284fb00], connection: __posix_open_file, 667: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted Raw: [1586546237:772524][29:0x7fe9f284fb00], connection: __posix_open_file, …Run Code Online (Sandbox Code Playgroud) wiredtiger ×13
mongodb ×12
database ×2
c ×1
concurrency ×1
docker ×1
indexing ×1
linux ×1
lsm-tree ×1
performance ×1
primary-key ×1
pymongo ×1
python ×1
zlib ×1