Настройка драйвера mongodb node.js для использования мгновенного сжатия

Недавно мы обновили набор реплик MongoDB до версии 3.4.4; Я заметил, что этот выпуск теперь поддерживает сжатую сетевую связь с snappy. У меня есть установленные члены, чтобы включить это, чтобы они взаимодействовали друг с другом таким образом, и оболочка mongo, кажется, изначально поддерживает это, но я не могу найти никакой документации о том, как настроить наши клиенты Node.js использовать его.

Конечно, все по-прежнему работает нормально, поскольку используется несжатая связь, когда клиент и сервер не могут договориться о протоколе сжатия, но было бы хорошо иметь возможность воспользоваться этим по понятным причинам.

Кто-нибудь еще играл с этим или ему повезло?

Похоже, что у Mongo есть открытый тикет по этому вопросу, но интересно, есть ли у кого-нибудь еще добился какого-либо прогресса независимо от этого.


person Thomas J. Girsch    schedule 08.06.2017    source источник


Ответы (1)


У вас есть два варианта включения сжатия:

1) Вариант драйвера

Установите параметр драйвера при инициализации MongoClient. В зависимости от драйвера синтаксис может отличаться. См. документы, например:

"options": {
    "compression": [
        "zstd",
        "snappy",
        "zlib"
    ]
}

2) Строка подключения

Добавьте аргумент compressors в строку подключения, например:

mongodb://example.com/?compressors=zstd,snappy,zlib

Примечание

  • Приведенные выше примеры демонстрируют, как установить несколько компрессоров, чтобы лучше объяснить синтаксис и сделать ответ более полезным. Если вы хотите установить только один компрессор, измените его соответствующим образом.

  • Дополнительные примеры настройки компрессоров можно найти в драйвере mongoDB Node.js тестовые скрипты.

  • Вы можете проверить, используется ли сетевое сжатие и какой алгоритм сжатия используется в журналах монго, так как каждое сжатие/распаковка генерирует подробная запись в журнале. Или вы можете запустить db.serverStatus()['network'] и понаблюдать за bytesIn/bytesOut различных компрессоров, например:

    {
        "bytesIn" : NumberLong("1828061251"),
        "bytesOut" : NumberLong("57900955809"),
        "physicalBytesIn" : NumberLong("2720120753"),
        "physicalBytesOut" : NumberLong("32071382239"),
        "numRequests" : NumberLong("570858"),
        "compression" : {
            "snappy" : {
                "compressor" : {
                    "bytesIn" : NumberLong("2215000774"),
                    "bytesOut" : NumberLong("752759260")
                },
                "decompressor" : {
                    "bytesIn" : NumberLong("226402961"),
                    "bytesOut" : NumberLong("848171447")
                }
            }
        },
        "serviceExecutorTaskStats" : {
            "executor" : "passthrough",
            "threadsRunning" : 80
        }
    }
    
person Manuel    schedule 06.01.2020