Как выполнить асинхронную очистку для mongodb с использованием Perl? - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть несколько процессов, которые пишут в MongoDB.Мне кажется, что когда один из процессов выполняет fsync для сброса на диск, все остальные процессы ожидают и не могут записать.

Я следую инструкции на https://metacpan.org/pod/MongoDB::MongoClient.

Вот мой код:

        my $time_stamp_0 = time();
        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time_stamp_0);
        my $time_stamp = sprintf("%d-%02d-%02dT%02d:%02d:%02d", $year + 1900, $mon + 1, $mday, $hour, $min, $sec);
        printf "%s DEBUG  -  before fsync(async) at: %s \n", $time_stamp, $time_stamp_0;

        $client->fsync({ async => 1 });
        #$client->fsync();

        my $time_stamp_1 = time();
        ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time_stamp_1);
        $time_stamp = sprintf("%d-%02d-%02dT%02d:%02d:%02d", $year + 1900, $mon + 1, $mday, $hour, $min, $sec);
        printf "%s DEBUG  -  after  fsync(async) at: %s. Action duration: %6.2f \n",
            $time_stamp, $time_stamp_1, $time_stamp_1 - $time_stamp_0;

Я ожидал, что «асинхронное» действие не будет блокирующим действием.Так что мой процесс будет продолжаться быстро, а сброс на диск происходит в фоновом режиме.Однако процесс (или даже все процессы) заблокированы.Вот пример выходного кода выше:

2019-09-26T09:47:05 DEBUG  -  after  fsync(async) at: 1569505625.18033. Action duration:  15.54

Есть ли способ выполнить сброс на диск при вставке большего количества записей?

Кстати: я использую Mongo 4.0.12 наОС Centos-7.

...