
Анатолий
29.05.2018
10:43:28
вот такой запрос - зависает, и надолго

yopp
29.05.2018
10:43:44
А другой какой запрос?

Анатолий
29.05.2018
10:44:20
db.collection.find({"extra.sessid":{"$in":["31723acf50a0148d575124d44c7bdb95","be6d00ae71209fdc00b22cf31cfbd908","5cbf8d0072da6956bfc8277e3ecd4ccb","1c27187cc0384a4a84aef9e5e56becb4"]}}, {"datetime" : 1,"extra.recordNumber" : 1,"action.id" : 1,"level_name" : 1,"extra.sessid" : 1,"extra.userId" : 1,"message" : 1,"context.errorCode" : 1,"context.error" : 1}).sort({'datetime':-1,'extra.ROW_NUM':-1});
без скипа и лимита

Google

Анатолий
29.05.2018
10:44:49
и он сразу отрабатывает

Nick
29.05.2018
10:44:54
ну собсна инндекс по {'datetime':-1,'extra.ROW_NUM':-1}
и все будет норм

Анатолий
29.05.2018
10:45:56
или не сразу. тоже завис походу

yopp
29.05.2018
10:46:48
Измеряйте с explain("executionStats")

Анатолий
29.05.2018
10:47:54
в коллекции должен быть индекс по фильтру и по сортировке?
или один, которые все поля включает?

yopp
29.05.2018
11:04:09
Сделайте оба запроса с explain(executionStats) и сравните планы
Можете на gist запостить

agic
29.05.2018
12:15:42
my $now2 = DateTime->now( time_zone => 'Europe/Moscow' )->subtract(minutes => 15);
my $dt = DateTime->new( year => 2018, month => 5, day => 29, hour => 14, minute => 50 );
dt=2018-05-29T14:50:00
now2=2018-05-29T14:56:19

Google

agic
29.05.2018
12:15:42
my $cnt = $users->find({ 'answer.0.results.0.to' => $arg1, 'date' =>{'$gte' => $dt }});
есть две даты ) вывод я показал
далее 1 конутрукция работает корректно
my $cnt = $users->find({ 'answer.0.results.0.to' => $arg1, 'date' =>{'$gte' => $now2}});
не работает
я разницы не вижу
добрый день может есть любители перла

Nick
29.05.2018
12:32:07
смущает что в одном случае указывает таймзона в явном виде, можете сделать тоже самое указав например не минус 15 мину, а минус 5 часов?
ну или минус 3 часа 15 минут, с 5 часами нагляднее будет

K
29.05.2018
13:00:02
У меня такой вопрос, немного не конкретно практический, а более общего плана.
Если пишутся два квери на один и тот же документ, монго это контролирует и выполняет их одну за одной по условиям поиска этих квери на момент их execution, так?
ACID для единичных документов выполнен, я так понимаю и вроде это написано в доках

yopp
29.05.2018
13:01:32
Ну почти, да
Для WT запрос будет выполнятся в снапшоте всей коллекции на момент начала запроса.

K
29.05.2018
13:02:27
Если я пишу bulkWrite (mongoose) то как сделать префлайт проверку, записать в pre скрипт итерации, полла и проверки данных перед каждым выполнением?

yopp
29.05.2018
13:02:39
Никак

K
29.05.2018
13:02:43

yopp
29.05.2018
13:03:40
Вам даётся гарантия только на один конкретный документ. И эта гарантия только на момент выполнения операции с этим конкретным документом.
Грубо говоря, монга вам гарантирует что отправленный вами апдейт будет применён к любой текущей версии документа

K
29.05.2018
13:04:36
Каким образом мне оформить интергити моего bulkWrite если вдруг разные процессы апи возможно будут писать на некоторые смежные документы?

yopp
29.05.2018
13:04:44
И другие запросы не увидят промежуточной версии документа

Google

yopp
29.05.2018
13:05:03
bulkWrite вам вообще никаких гарантий не даёт.
Это просто механизм оптимизации передачи нескольких insert
Он работает по принципу «что мог, то вставил»
И если он сломается где-то, вы скорее всего даже не узнаете что он конкретно вставил
Пока не прочитаете

K
29.05.2018
13:06:58
Понимаю, решение вообще им не пользоваться? Кидать всё через for await of отдельными квери?

yopp
29.05.2018
13:07:14
Я не могу вам ничего про ваш драйвер сказать.

K
29.05.2018
13:07:37
Не, я концептуально

yopp
29.05.2018
13:08:17
Если к практической задаче перейдете, будет проще

K
29.05.2018
13:08:49
Просто не пользоваться bulkWrite и писать всё через обычные инсерты с лупами по значениям для квери этих апдейтов / инсертов вижу решение

yopp
29.05.2018
13:09:28
Я не вижу :) потому что не понимаю что вы хотите сделать

K
29.05.2018
13:14:47

yopp
29.05.2018
13:15:11

K
29.05.2018
13:16:10
А как действут writeConcern? Что именно он означает?

yopp
29.05.2018
13:23:52

agic
29.05.2018
13:33:28
разобрался и вы были правы
суть в том что я подключаюсь к чужой базе не своей локальной и мне незивестно как туда ложат
суть в том что монго в gte смотрит на таймзону

Google

agic
29.05.2018
13:34:50
эти веселые ребята ложат таймзону UTC а время там moscow
my $now2 = DateTime->now( time_zone => 'UTC' )->add(hours => 3)->subtract(minutes => 15)
вот так получается чтобы работало

Nick
29.05.2018
13:35:23
вообще монга внутри работает с датами только в UTC виде. Хранение таймзон - это отдельная задача

agic
29.05.2018
13:35:49
ну скажем не знал

Nick
29.05.2018
13:35:59
и еще один момент дял понимания, сама монга не преобразует времена, это делается на стороен приложения, либо в нем самом либо драйвером

agic
29.05.2018
13:36:03
так и ложить надо в UTC а не в local

Nick
29.05.2018
13:36:29
да, этот момент при работе с монгой нужно явно отображатсья в доках описания структуры данных БД

agic
29.05.2018
13:36:40
без указания тайм зоны со смещением тоже не работает
а то получается вот такой костыль для работы
потому что люди ложать в локал тайм
так какой это канал ) вообще перл очень медленно работает с монгой( питон побыстрее будет

Nick
29.05.2018
13:37:54
скорее всего они не вкурсе что драйвер возьмет их локальное как UTC и отбросит таймзону

agic
29.05.2018
13:38:15
вот что мне прислали
как ложат время
insert_one ({answer=> \@rjson, date => DateTime::Tiny->now});
они не парились )

Nick
29.05.2018
13:50:08
жаль еще не завезли функции для инкремента/декремента дат, а то можно было бы поправить содержимое

yopp
29.05.2018
13:51:21

Google

yopp
29.05.2018
13:51:36
Разве inc по дате не работает?

Nick
29.05.2018
13:52:14
может на 3.4 не завезли
но перед тем как написать првоерил
аж самому интересно стало могет или нет
мне выдало что только для числовых типов поддерживается
если есть 3.6 в наличии попробуй
Cannot apply $inc to a value of non-numeric type. {_id: ObjectId('5b0d5a265eff4cca81d4e003')} has the field 'ddd' of non-numeric type date
{
"_id" : ObjectId("5b0d5a265eff4cca81d4e003"),
"ddd" : ISODate("2018-05-29T20:19:00.201Z")
}
db.getCollection('t1').update({
"_id" : ObjectId("5b0d5a265eff4cca81d4e003")
},{
$inc:{ddd: -1}
});
както так

agic
29.05.2018
13:58:01
)
у меня почему то еще монго с перлом ну прямо жестоко грузит проц
я пробывал и так и сяк извращаться не помогает, с питон тоже самое не грузит так

Nick
29.05.2018
14:00:07
с перлом не помогу, можно найти репу драйвера и туда ишью накатать, может кто уже сталкивался или это вообще бага

agic
29.05.2018
14:00:50
https://stackoverflow.com/questions/41108103/mongodb-high-cpu-usage-long-read-time

Nick
29.05.2018
14:01:41
эм, а жрет проц локальная монга или ваша приложуха?

agic
29.05.2018
14:06:40
сам перл
локальная монга хз где
сам скрипт довольно тупой
my $users = $client->ns("1.1");