@MongoDBRussian

Страница 177 из 342
Arthur
17.01.2018
19:47:58
Zloy Dobriy
17.01.2018
19:50:48
Наверное. Хотя, как поставлен вопрос, так и получен ответ, тамщемта. Возможно стоит воспользоваться $match в том же aggregate

Arthur
17.01.2018
19:54:31


Zloy Dobriy
17.01.2018
19:54:55
Да ну опять же.

Google
Zloy Dobriy
17.01.2018
19:54:59
Модно зато

Ну да ладно, продолжайти

Arthur
17.01.2018
19:58:55
если делать db.coll.find({customid: 1408}).sort({member.timestamp: 1, client.date: 1}); то сначала выводяться все отсортированные документы с member.timestamp , а потом client.date отсортированные а надо чтобы они вместе сортировались ))

Ivan
17.01.2018
21:00:29
А что если у элемента две даты, то как сортировка будет? Если извращаться, то смотри в сторону pipeline, а на деле неправильно хранишь данные, вот и задача дурацкая

Nick
18.01.2018
07:36:41
если делать db.coll.find({customid: 1408}).sort({member.timestamp: 1, client.date: 1}); то сначала выводяться все отсортированные документы с member.timestamp , а потом client.date отсортированные а надо чтобы они вместе сортировались ))
если я правильно понял, то вам нужно, чтобы member.timestamp и client.date у разных документов сравнивались между собой и выстраивались в общий ряд, но для разных поле это сделать невозможно. сортировка которую вы использовали работает корректно, т.к. это сортировка сначала по одному полю, потом по второму. а то что вам нужно потребует изменения формата данных либо использования агрегаций, где вы будете оба поля мапить в новое, уже по которому будете производить сортировку

Nick
18.01.2018
07:39:15
но лучше всетаки пересмотреть структутуру данных пока не поздно, обычно такие проблемы - это первые звоночки, что данные не подходят под запросы

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

и еще я вижу у вас две разные сущности в одной коллекции, если допустимо, то общее нужно вынести на врехний уровень документа и добавить флаг client/member, позволит строить нормальные индексы

Arthur
18.01.2018
07:47:25
согласен, спасибо за помощь!надо будет както изменить данные которые уже есть...

Moe
18.01.2018
11:11:50
парни, тут пытаюсь подключиться к mongodb atlas он спрашивает у меня версию драйвера - выше 3.6 или ниже 3.4 а как мне узнать мою версию драйвера, чтобы подсунуть ему?

Serge
18.01.2018
12:23:36
https://twitter.com/lig1/status/953965736002834432

Google
Serge
18.01.2018
12:24:22
https://twitter.com/lig1/status/953965736002834432
тока не баньте;) сорри, если не в тему

Artem
18.01.2018
13:06:59
коллеги, а не подскажете, можно ли питоновским скриптом вытащить db.getReplicationInfo()? pymongo вообще позволяет это?

Moe
18.01.2018
13:16:09


Serge
18.01.2018
13:27:29
Artem
18.01.2018
13:32:55
http://api.mongodb.com/python/current/api/pymongo/database.html#pymongo.database.Database.command подойдет?
хм, насколько я понял это просто вызов команды монги из питона. Поясню ситуацию, у меня есть 3 кластера, в каждом 10-12 репликасетов, в каждом репликасете 4 ноды (3+архивная, с отставанием на час). Время от времени случаются ситуации, когда из за интенсивной записи, архивные ноды отваливаются в recovering, потому как не хватает размера оплога. на наиболее критичных репликасетах мы выкрутили оплог до максимума, что в общем то исправило ситуацию. К остальному хозяйству, я хочу прикрутить мониторящий скрипт, который покажет размер оплога, время на которое его хватает, для каждой из нод кластера.

Dmitry
18.01.2018
19:15:53
Ребят, привет. Я фронтендер, в серверной разработке новичок. В чём вопрос: Есть костяк сайта, сервер на node.js, фронт на vue.js, бд монго. Локально CRUD в монго работает, на удалённом сервере (у меня linode 1gb) появляется ошибка: "net::ERR_CONNECTION_REFUSED" Как настроить права доступа для приложения? Ubuntu 16.04 Прокси nginx

Artem
18.01.2018
20:22:44
Я пошел немного другим путем. Дернул в питоне оплог как коллекцию, и размер вытащил из статов. А время думаю рассчитать как разницу между последней и первой записью коллекции

yopp
18.01.2018
20:22:53
не надо думать

можно просто исходник метода в шелле посмотреть

просто убрав скобки

но так да, логика верная

https://github.com/db-ai/mongo_collection_exporter/blob/master/app/models/exporter/collector/op_log.rb

а зачем оно надо?

Artem
18.01.2018
20:32:40
а зачем оно надо?
Ну просто интенсивность записи в шардированный кластер видимо настолько велика, что у нас пару раз была ситуация, когда оплога в 10 гигов, в репликасетах кластера хватало всего на 5-10 минут. Из за этого отваливались бэкапные ноды, которые по задумке архитектора должны были отставать на час от мастеров. Поэтому я для собственного удобства понимания картины происходящего с кластером, пытаюсь скриптами вытащить данные по состоянию репликасетов.

yopp
18.01.2018
20:33:02
разверни mongo_collection_exporter

prometheus + grafrana + экспортер

Google
yopp
18.01.2018
20:33:24
там даже готовые дешборды есть,

но вообще надо просто увеличить размер оплога

Artem
18.01.2018
20:33:55
Не поверишь, так и делаю.

yopp
18.01.2018
20:34:40
а зачем бекапные ноды отстают?

вы же знаете что ваши бекапы сломанные, если это в шардед кластере?

Sharding In sharded clusters, delayed members have limited utility when the balancer is enabled. Because delayed members replicate chunk migrations with a delay, the state of delayed members in a sharded cluster are not useful for recovering to a previous state of the sharded cluster if any migrations occur during the delay window.

https://docs.mongodb.com/manual/core/replica-set-delayed-member/#sharding

Artem
18.01.2018
20:38:20
мин, ща за нормальную клаву пересяду.

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

но сейчас, я практически везде делей убрал

yopp
18.01.2018
20:43:42
вообще делейд ноды в шрадед кластере это очень кривая забава, такие гипотезы надо проверять на копии боевых данных и желательно симулиря боевые нагрузочные условия

так как например два часа с момента запуска балансировки уже выпадают

делать бекапы с этих нод надо очень аккуратно и есть очень высокая вероятность получить неконсистентные бекапы которые потом в бой будет очень дорого выкатить.

вообще бекапить шардед кластер сложновато

Artem
18.01.2018
20:45:36
вообще делейд ноды в шрадед кластере это очень кривая забава, такие гипотезы надо проверять на копии боевых данных и желательно симулиря боевые нагрузочные условия
я это понимаю. поэтому отставание я отключил. с бэкап нод просто происходит ежесуточный бэкап базы, скриптом останавливается запись в базу, и датафайлы сливаются в хранилище.

yopp
18.01.2018
20:46:08
по плейбуку из доки, с маркерами?

Artem
18.01.2018
20:46:20
не запись, путаюсь в терминах, репликация.

yopp
18.01.2018
20:46:51
если это не по плейбуку сделано, то надо изучить плейбук и переделать как там написано

дожидаться завершения репликации до маркера нодами с которых снимается снепшот, не забывать тоже самое делать в CSRS

убеждаться что балансер и выключен и не активен

Google
yopp
18.01.2018
20:48:47
под большой нагрузкой выключение балансера != завершению работы балансера

https://docs.mongodb.com/manual/tutorial/backup-sharded-cluster-with-filesystem-snapshots/

И да, вот это: IMPORTANT To capture a point-in-time backup from a sharded cluster you must stop all writes to the cluster. On a running production system, you can only capture an approximation of point-in-time snapshot.

Всё ещё актуально

yopp
18.01.2018
20:53:31
ну вот тогда надо сделать risk assesment вашего бекапа

но вообще, большой и жырный кластер в большинстве случаев нужно логически поделить по ценности и критичности для бизнеса и не бекапить всё

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

а что у вас там с такими размерами, что оплога хватает на 5-10 минут?

gridfs?

или что-то с высокой частотой обновления?

RTB там какой

eshch
18.01.2018
21:59:23
блин, нереально. нам никто не даст остановить запись
а я говорил что надо делать the world для бэкапа

stop the world

Serge
18.01.2018
22:03:49
В каком городе вам было бы удобнее всего посетить MongoDB митап? Москве – 19 ??????? 28% Санкт-Петербург – 16 ?????? 24% Всё это далеко от меня – 12 ???? 18% Киев – 6 ?? 9% Владивосток – 4 ? 6% Ростов-на-Дону – 4 ? 6% Екатеринбург – 3 ? 4% Минск – 3 ? 4% Воронеж – 1 ▫️ 1% Астана ▫️ 0% ? 68 people voted so far.

Google
Alexander
19.01.2018
04:26:59
парни, а в mongoose можно в схеме определить тип массив и чтобы допустимые значения были ограничены данными из массива?

о! или валидатор проще прикрутить?

IGOR
19.01.2018
05:24:04
У меня очень интересный вопрос. Как Монго воспринимает пустую строку в отношении занятого места? Что "экономнее" хранить, пустую строку типа '' или null ?

Этот вопрос родился когда я увидел что база в SQL занимает 130 кб, а в Монго 6 мегабайт. Пустые строки есть и их прилично, вот и подумал

Alexander
19.01.2018
06:07:16
NULL - 1 байт "" = 2 байта

IGOR
19.01.2018
06:20:35
NULL - 1 байт "" = 2 байта
но не может же быть такая разница. Одни и теже данные в MySql занимают в разы меньше

Alexander
19.01.2018
06:21:14
https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GSQL_langelements_null

Since a NULL truly has no value, appending a blank to it creates a string of length 1. But an empty string does have a character value, so appending a blank to it creates a string of length 2

Mykola
19.01.2018
06:31:28
Кто сталкивался. Почему может JSON приходить в противоположной очерености ?.





Да, но всегда возвращало одинаково и теперь поменялось. Что может быть причиной ?.

Alexander
19.01.2018
06:50:52
python?

Mykola
19.01.2018
06:55:10
Node

Пробывал в разных браузерах и разных JSON formator extension

GNU/Docker
19.01.2018
07:52:19
Эм.

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