@MongoDBRussian

Страница 251 из 342
Анатолий
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
Я не вижу :) потому что не понимаю что вы хотите сделать
Говорил же, не конкретный случай, хочу точно понять как действует драйвер в разных ситуациях)

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

yopp
29.05.2018
13:23:52
А как действут writeConcern? Что именно он означает?
https://docs.mongodb.com/manual/reference/write-concern/

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
жаль еще не завезли функции для инкремента/декремента дат, а то можно было бы поправить содержимое

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");

Страница 251 из 342