@MongoDBRussian

Страница 171 из 342
Yura
03.01.2018
13:21:29
Руби драйвер для eventmachine всю жизнь посылал запросы мультиплексированно через один коннект. И если есть уверенность, что запросы все быстрые, это выигрышная стратегия. Но если один запрос затормозит весь хвост, будет не приятно :-(

yopp
03.01.2018
13:40:16
Смотри, с позиции драйвера нет «запросов». Есть дубовый wire протокол (по сути реализует логические фреймы) в котором payload — bson документы. Формат документов описывается поддерживаемыми командами.

Раньше там были разные типы фреймов, но их всех свели к одному M_MSG

Я сейчас могу врать, но насколько я помню сам протокол — request / response. Из-за этого например Bulk запрос это по сути один сгруппированный запрос и на него будет один ответ.

Google
yopp
03.01.2018
13:44:59
С этим связанны сложности с отслеживанием статуса конкретного запроса из bulk

Но мои знания актуальны на 2.8 – 3.0, там в последнее время кучу всего перепилили

Я не уверен что мультиплексирование возможно. Если на одно соединение можно открыть несколько сессий, то да. Если нет, то скорее всего архитектура под это не заточена.

Ты можешь почитать спеки

The OP_MSG message is essentially a request-response protocol, one message per turn. However, setting the moreToCome flag indicates to the recipient that the sender is not ready to give up his turn and will send another message.

https://github.com/mongodb/specifications/blob/master/source/message/OP_MSG.rst

https://docs.mongodb.com/ecosystem/drivers/specs/ от сюда можно начинать обзор

Можешь ещё в жире поискать

Можешь написать Emily, которая руби драйвер пилит

В твиттере @EmStoflo

Yura
03.01.2018
14:09:28
Я уже успел попробовать em-mongo драйвер. Он старенький, но еще работает. И корректно мультиплексирует. И монга корректно отрабатывает. Но если с одного коннекта запросы обрабатываются строго по очереди, это резко уменьшает полезность мультиплексирования. Товарищ говорит, что эксперимент с killOp подтверждает, что это так, т.к. killOp посланный в тот же коннект не убивает запрос. Про OP_MSG я успел почитать до того, как сюда писать. Если приглядитесь, хедер фрейма остается прежним, а requestid и responsefor живёт именно в заголовке фрейма, и от типа фрейма не зависит. Т.е. "новый" протокол имеет те же возможности мультиплексирования, что и "старый" (т.к. это по сути тот же протокол).

Старый
03.01.2018
14:09:56
Можешь написать Emily, которая руби драйвер пилит
у рубистов популярно монгу вместо редиса юзать

yopp
03.01.2018
14:14:08
у рубистов популярно монгу вместо редиса юзать
Это на основании чего такое заявление?

Google
yopp
03.01.2018
14:14:35
Но в целом это всё просто проверить. Нужно порезать в докере ресурсы, в первую очередь io и симулировать медленные и быстрые запросы.

Alex
03.01.2018
14:20:31
Yura
03.01.2018
14:22:24
Послал пять запросов. Он их все одним writev в сокет плюнкл.

Ответы пришли корректно тем колбэкам, что их ожидали.

Старый
03.01.2018
14:56:28
Это на основании чего такое заявление?
просто работал с 8 командами рубистов

чтот им редис всем не нравится, монгу говорят вместо него

сочетание правда mongo+postgre интересное

yopp
03.01.2018
14:57:57
просто работал с 8 командами рубистов
Рубисты которых я консультировал используют монгу по назначению. ¯\_(ツ)_/¯

Старый
03.01.2018
14:58:44
Рубисты которых я консультировал используют монгу по назначению. ¯\_(ツ)_/¯
ну. если тебе нужен редис который будет в 4 разных дц, выбор ток на монге ?

yopp
03.01.2018
14:59:22
Слабоумие и отвага

Sergey
03.01.2018
14:59:26
ну. если тебе нужен редис который будет в 4 разных дц, выбор ток на монге ?
Смотря какие задачи. Под локальный кеш редис явно быстрее.

Но вообще, живые рубисты. ?

yopp
03.01.2018
15:03:34
Денег зарабатывают, а чо.

Sergey
03.01.2018
15:04:45
Да хз, последний живой рубист, которого я знал, давно пишет на JS.

yopp
03.01.2018
15:05:34
Плохой рубист значит

Вон, @funny_falcon так вообще у нас кучу полезностей в руби накомитил

Yura
03.01.2018
15:46:35
Google
Старый
03.01.2018
15:53:31
так и ксс можно в отдельный язык сделать

Sergey
03.01.2018
16:00:11
так и ксс можно в отдельный язык сделать
И btrfs в разряд стабильных, ага

Tenni
03.01.2018
16:03:12
хрыч и тут троллит

Jonas
03.01.2018
16:55:01
Если я правильно понял, то так: collection.find({}, 'city') Такой запрос вернёт все города, которые есть в БД
нето что я хочу. Там пользователь может нажать кнопку все города а может нажать на один город. У меня в фильтре много параметров. И тут мне надо будет делать if else conditions. Если "всe" то в фильтр не вклчаем параметр города если один город "Chicago" то включаем параметр города. А я не хочу убирать этот параметр. Пусть он всегда будет стоять. Просто надо будет менять значение в зависимости от города. Типа collection.find({'city':'all'}) collection.find({'city':'Chicago'})

Nick
03.01.2018
19:33:41
Просто не передавай параметры, find({})

Alexander
04.01.2018
04:56:06
подскажите, плз, есть модель, содержащая поля field1 и date { "field1": "One", "date": "some date1" }, { "field1": "Two", "date": "some date2" }, { "field1": "Three", "date": "some dat3" }, { "field1": "Four", "date": "some date4" } как можно обновить поле date у нескольких записей, если есть массив типа [ {"field1": "One", "date": "new date"}, {"field1": "Three", "date": "one more date"} ] Поле field1 проиндексировано.

а вот так должно работать? Model.updateMany({}, { $set: { date: new Date() } });

Alexander
04.01.2018
07:43:11
Никак. Делать несколько запросов
а как обновить updatedAt ? пробую так, но не работает )) Source.updateMany({}, { $currentDate: { lastModified: true } }, { multi: true }); $set какой-нибудь обязательно делать?

yopp
04.01.2018
08:16:30
Как это никак
Во так — никак. Установить в два разных документа разные значения в одном апдейте нельзя

Zloy Dobriy
04.01.2018
08:18:12
yopp
04.01.2018
08:20:15
В оригинальном вопросе два документа и две даты.

Но вообще да, нужно указать $set

Google
Alexander
04.01.2018
08:28:41
А можно поинтересоваться как вы получаете события так, что вам требуется одновременно менять два не связанных поля? Или вы пытаетесь оптимизировать?
читаю rss из нескольких источников в разных часовых поясах. надо обновить запись каждого источника с указанием последнего pubDate из rss. field1 - uid источника. Второй массив, это массив обновленных rss

Но, перечитав ТЗ, склоняюсь к тому, что проще завести одну запить с UTC и ее апдейтить при каждом дергании rss

Nick
04.01.2018
09:00:51
Если хотите делать один большой запрос, то можете посмотреть в сторону bulkWrite https://docs.mongodb.com/manual/reference/method/db.collection.bulkWrite/

Zloy Dobriy
04.01.2018
10:13:20
Нагрузочка подрастет и не упадет, например.

Гуглит

anatolii
04.01.2018
10:32:14
Нагрузочка подрастет и не упадет, например.
Один коннект с 5 запросами и нагрузочка подрастет, а 5 коннектов с 5 запросами не подрастет?

Zloy Dobriy
04.01.2018
10:33:37
А зачем тебе в каждый запрос - коннект?

IGOR
04.01.2018
10:34:12
Всем привет

anatolii
04.01.2018
10:35:09
А зачем тебе в каждый запрос - коннект?
я не так выразился, но думаю ты понял что я имею ввиду

Zloy Dobriy
04.01.2018
10:35:32
Нет не понял.

IGOR
04.01.2018
10:35:48
кто может носом тыкнуть как вернуть значения из findOne в переменную чтобы дальше работать с ней

yopp
04.01.2018
10:35:53
Напримеп чем больно?
единственное чем больно — ошибок запросов не будет видно

Valentin
04.01.2018
10:38:35
Охайо, немного оффтопа - есть чатик по nodejs/express?

anatolii
04.01.2018
10:40:02
https://t.me/nodejs_ru - чистая нода есть

GNU/Docker
04.01.2018
10:40:03
Как с этим могут сложности то возникнуть.

Какой ЯП то хоть?

Документацию смотрели?

Google
Nick
04.01.2018
10:41:10
Ну ошибки это уже походу к драйверу, т.к. Апсерты в булках вполне себе выдают ошибки по каждому апдейту, если были например дубли по юник индексам. Java драйвер если что. И да требуется обходить массив ошибок, но вполне приемлемо

Valentin
04.01.2018
10:41:55
keystr0ke
04.01.2018
10:42:08
IGOR
04.01.2018
10:42:56
с помощью оператора =, если он есть в используемом языке
у мня NodeJS и mongoose и я не могу найти в интернете инфу как это сделать

IGOR
04.01.2018
10:44:13
Может есть пример кода где через = можно переменной присвоить переенной результать findOne ?

Alexander
04.01.2018
10:44:44
Может есть пример кода где через = можно переменной присвоить переенной результать findOne ?
асинхронная функция, в консоль выведи результат = будет "pending"

Timur
04.01.2018
10:45:15
keystr0ke
04.01.2018
10:45:24
IGOR
04.01.2018
10:47:19
http://mongoosejs.com/docs/index.html обратите внимание на коллбеки
User.find({}, callback); console.log(callback); User.find({}, callback); ^ ReferenceError: callback is not defined

вот что пишет

Alexander
04.01.2018
10:47:50
anatolii
04.01.2018
10:48:09
User.find({}).then(function(users){ console.log(users) })

keystr0ke
04.01.2018
10:49:37
User.find({}, callback); console.log(callback); User.find({}, callback); ^ ReferenceError: callback is not defined
вы не определили callback, им может быть любая функция, она должна принимать два агрумента, первый - статус ошибки, вторым аргументом идет то, что вам нужно

тут можно найти больше примеров по findOne - http://mongoosejs.com/docs/api.html#model_Model.findOne

IGOR
04.01.2018
10:50:37

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