mongodb - 写入时出现 MongoDB 错误 - 超出配额

标签 mongodb mongodb-java quota

我有一个写入副本集的 JAVA 应用程序。我正在使用 3.0.7 版本的 MongoDB 服务器。 Java 的 mongo-driver 是 3.0.4。 它工作得很好,但现在所有写入都出现以下错误:

com.mongodb.MongoWriteException: quota exceeded
at    com.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:487)
at com.mongodb.MongoCollectionImpl.update(MongoCollectionImpl.java:474)
at com.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:325)

查看了 MongoDB 配置文档,我没有在 mongod.conf 中设置任何配额限制。我也不使用 smallFiles。

但我认为我遇到了文件大小限制。我的数据库的文件大小如下:

total 6240548
-rw------- 1 mongod mongod   67108864 Dec  8 16:55 2015.0
-rw------- 1 mongod mongod  134217728 Dec  8 12:15 2015.1
-rw------- 1 mongod mongod  268435456 Dec  8 12:15 2015.2
-rw------- 1 mongod mongod  536870912 Dec  8 12:15 2015.3
-rw------- 1 mongod mongod 1073741824 Dec  8 12:15 2015.4
-rw------- 1 mongod mongod 2146435072 Dec  8 16:06 2015.5
-rw------- 1 mongod mongod 2146435072 Dec  8 16:06 2015.6
-rw------- 1 mongod mongod   16777216 Dec  8 16:55 2015.ns
drwxr-xr-x 2 mongod mongod       4096 Dec  7 09:14 _tmp

/etc/mongod.conf 如下:

    storage:
       dbPath: /data/mongoDB
       indexBuildRetry: true
       repairPath: /data/mongoDB/repair
       journal:
          enabled: true
       directoryPerDB: true
       syncPeriodSecs: 60
       engine: mmapv1
       mmapv1:
          preallocDataFiles: false
          nsSize: 16
          quota:
             enforced: false
             maxFilesPerDB: 8
          smallFiles: false
          journal:
             debugFlags: 0
             commitIntervalMs: 100

可能出了什么问题?

PS:正在使用/etc/mongod.conf。

mongod   10864     1  0 Nov16 ?        03:10:34 /usr/bin/mongod -f /etc/mongod.conf

更新 - 1。通过将集合名称更改为新集合来尝试相同的更新。成功了!但还没有解释这个问题。 2. 将 java 驱动程序更改为 3.0.3,但没有帮助。

Update- 2:(12/9) 添加集合统计信息,因为它与集合本身和 java 驱动程序有关。如果有什么问题请告诉我。

    {
        "ns" : "2015.events",
        "count" : 827054,
        "size" : 3814018,
        "avgObjSize" : 4722,
        "numExtents" : 22,
        "extents" : [
            {
                "len" : 8192,
                "loc: " : {
                    "file" : 0,
                    "offset" : 20480
                }
            },
            {
                "len" : 32768,
                "loc: " : {
                    "file" : 0,
                    "offset" : 2134016
                }
            },
            {
                "len" : 131072,
                "loc: " : {
                    "file" : 0,
                    "offset" : 2166784
                }
            },
            {
                "len" : 524288,
                "loc: " : {
                    "file" : 0,
                    "offset" : 2297856
                }
            },
            {
                "len" : 2097152,
                "loc: " : {
                    "file" : 0,
                    "offset" : 2822144
                }
            },
            {
                "len" : 8388608,
                "loc: " : {
                    "file" : 0,
                    "offset" : 4919296
                }
            },
            {
                "len" : 11325440,
                "loc: " : {
                    "file" : 0,
                    "offset" : 14356480
                }
            },
            {
                "len" : 15290368,
                "loc: " : {
                    "file" : 0,
                    "offset" : 28827648
                }
            },
            {
                "len" : 20643840,
                "loc: " : {
                    "file" : 0,
                    "offset" : 44118016
                }
            },
            {
                "len" : 27869184,
                "loc: " : {
                    "file" : 1,
                    "offset" : 8192
                }
            },
            {
                "len" : 37625856,
                "loc: " : {
                    "file" : 1,
                    "offset" : 36265984
                }
            },
            {
                "len" : 50798592,
                "loc: " : {
                    "file" : 1,
                    "offset" : 78086144
                }
            },
            {
                "len" : 68579328,
                "loc: " : {
                    "file" : 2,
                    "offset" : 8396800
                }
            },
            {
                "len" : 92585984,
                "loc: " : {
                    "file" : 2,
                    "offset" : 93753344
                }
            },
            {
                "len" : 124993536,
                "loc: " : {
                    "file" : 3,
                    "offset" : 8192
                }
            },
            {
                "len" : 168742912,
                "loc: " : {
                    "file" : 3,
                    "offset" : 125001728
                }
            },
            {
                "len" : 227803136,
                "loc: " : {
                    "file" : 4,
                    "offset" : 8192
                }
            },
            {
                "len" : 307535872,
                "loc: " : {
                    "file" : 4,
                    "offset" : 239136768
                }
            },
            {
                "len" : 415174656,
                "loc: " : {
                    "file" : 4,
                    "offset" : 595939328
                }
            },
            {
                "len" : 560488448,
                "loc: " : {
                    "file" : 5,
                    "offset" : 8192
                }
            },
            {
                "len" : 756662272,
                "loc: " : {
                    "file" : 5,
                    "offset" : 607756288
                }
            },
            {
                "len" : 1021497344,
                "loc: " : {
                    "file" : 6,
                    "offset" : 8192
                }
            }
        ],
        "storageSize" : 3826952,
        "lastExtentSize" : 997556,
        "paddingFactor" : 1,
        "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
        "userFlags" : 1,
        "capped" : false,
        "nindexes" : 8,
        "indexDetails" : {

        },
        "totalIndexSize" : 348270,
        "indexSizes" : {
            "_id_" : 47123,
            "remoteRequest.uri_1" : 76969,
            "transactionId_1" : 59611,
            "startTime_1" : 39027,
            "endTime_1" : 35235,
            "remoteRequest.queryParams.q_1" : 20328,
            "remoteRequest.queryParams.fq_1" : 38285,
            "elapsedTimeInNanos_1" : 31689
        },
        "ok" : 1
    }

最佳答案

您的 mongod.conf 有一个 quota为每个数据库启用。基于该 mongod.conf 文件,您将无法创建超过 8 个数据库文件,这限制了您最大约 6.4 GB 的存储空间。你提到你可以通过使用一个新的集合来解决这个问题,所以我对你的数据目录现在的样子很感兴趣。我不希望您能够绕过这个硬限制,但是由于内部数据结构,可能会在短时间内“绕过”它。

您可以通过运行 dbStats command 来验证实际存储了多少数据

use 2015
db.stats(1024*1024)

此输出将告诉您数据库中实际有多少数据,以及分配的存储量。这些数字将匹配,这是预期的,因为文档包含用于填充的空白空间。

我的下一个问题是,您是否有理由人为地限制您的 mongod 可以分配的存储空间量?也许是 capped collection会更适合您的需求?如果你能扩展你的用途,我或许可以给你一个更好的答案。

关于mongodb - 写入时出现 MongoDB 错误 - 超出配额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34166991/

相关文章:

arrays - Mongoose中,基于数组查询字段

node.js - 使用 Mongoose 模式生成假数据

java - MongoCollection 到 JSON 数组

java - 过滤 mongodb 查询后返回的数组元素

mongodb - 在 MongoDB 中将两个 $elemMatch 查询与 AND bool 运算符结合起来

mongodb - MongoDB在kubernetes中不持久

java - Google Analytics API 数据范围提取限制问题

google-cloud-platform - 无法在 Google Cloud Platform 中创建 Jupyter 笔记本实例

Java+MongoDB 托管

cloudkit - 如何获取 CloudKit 的实际配额?