Ivanov
Может быть такое что чисто group выполняется по индексу, а когда делаешь сначала lookup потом group, group делается не по индексу?
Nick
нет, груп не использует индексы
pinelover
Всем привет! Вопрос из серии best practices: имеет ли смысл держать в модели два ID-шника - один ObjectId, другой автоинкримент для генерации человеческих ссылок типа /user/324? или лучше сразу основной id сделать автоинкриментирующимся?
Bat
ребята. нужно некоторое пояснение. переношу проект с монго2 на 3. по сути 2 коллекции, в одной 600 записей, в другой 6000.
изза формы поступающих данных загоняю данные в 1ую, потом во 2ую. и после, некоторой математики, обновляю все позиции во второй (скажем пробиваю новые цены). В обоих случаях upsert. Потом "анализ" второй (обычный find с математикой не связанной со вставками)
между пунктом 2 и 3 у меня дичайшая задержка в 2.5 минуты
Bat
включаю лог, а там в это время валится потоком нечто типа
mongo_1 | 2018-06-25T04:37:44.718+0000 I COMMAND [conn66] command admin.$cmd command: endSessions { endSessions: [ { id: UUID("23ed5952-34b9-4071-b8ec-353fe00bb38f") } ], $readPreference: { mode: "secondaryPreferred" }, $db: "admin" } numYields:0 reslen:37 locks:{} protocol:op_query 0ms
Nick
@dd_bb подскажи есть ли в монге возможность при автобалансирвоании шардов указать приоритет, например если ест ьперекос между размером шардов, то чтобы в первую очередь сливало с самого тяжелого шарда, а не как повезет?
yopp
Nick
да вот тоже порыскал по докам и интернетам - тишина
Sergey
Nick
Это было актуально перед пепвой заливкой данных. Тогда были вручную разбиты диапазоеы ключей по мощности и раскиданы на тот момент еще пустые чанки по шардам. Но сейчас это сделать вручную нереально, данных слишком много да и размер чанка в среднем 250 метров
Nick
Он пепеносится на другой шард пару часов
Sergey
Nick
Смысла разбивать нет, мощность ключа лишь в 5 раз больше текущего количества чанков(40к) при условии, что часть из низ уже неперемещаемы изза лимитов на вес либо количество доков внутри
Nick
Да и контролить работу скрипта както накладно, е ли опять же вспомнить что стандартеый балансер умеет параллелиться, а в скрипте это придется уже реализовывать мне
Nick
Про одновременное
h0ba
Есть у кого линк на конфу в тг по mariadb ?
yopp
Dmitrii
есть массив из 30 id, и коллекция например из 100000 записей, подскажите, каким методом воспользоваться, чтобы узнать какой из этих 30 id еще не находится в коллекции?
Nick
Dmitrii
👍
Bandikoot
Nick
если стоит задача просто залить данные, то можно просто через upsert true перезатереть
Bandikoot
так в результате будет около 99971 записей
Dmitrii
не это не то
Dmitrii
мне не нужено выбрать все записи, мне нужно понять какие из 30 еще не находятся в БД
Nick
$in
Anonymous
Добрый день. подскажите как такое возможнО, что у арбитра лежит коллекция на 40+ гб?
Nick
потом вычитание результат из текущего массива
Dmitrii
точно
Vadym
Добрый день! Необходимо мнение специалистов в области MongoDb. Как лучше организовать пагинацию на фронте, используя mongodb? Ведь дял пагинации необходимо знать зараннее общее колличество элементов ну и сами отсупы и колличество выбираемых элементов. Что бы не обращаться пару раз к базе, можно ли такое реализовать одним запросом? И желательно без агрегации?
Stepan
А как вы хотите из бд отсупы и колличество выбираемых элементов узнать?
Vadym
Конечно отсупы и выбираемые элементы приходят с клиента. Я к тому, что бы всю эту выборку реализовать одним запросом и без аггрегации(если такое возможно)
Stepan
Вся выборка ето что?
Stepan
Нужные элементы?
Stepan
И их количество?
Vadym
Ну допустим у меня есть в базе 1000 элементов. И на клиенте реализована пагинация в колличестве по 10 элементов при каждом скроле. Допустим он пришлет мне limit=10, offset=0. Я ему в ответ первые 10 элементво и total = 1000;
Vadym
Возможно как то одни запросом выбрать конкретные элементы и получить общее колличество?
Nick
можно поизвращаться с https://docs.mongodb.com/manual/reference/operator/aggregation/facet/
Nick
но сразу можете забыть про индексы
Stepan
Удобная вещь
Stepan
Но, разве оно не будет использовать индекс для обычного $match
Stepan
?
Nick
может и будет, надо тестить, но я чтото не верю что последующий стейдж будет использовать индекс для скип/лимита и подсчета количества
Sergey
Ещё стоит готовиться к тому, что count в монге имеет сложность O(N). Кроме тех случаев, когда речь идёт о количестве всех документов коллекции.
Sergey
Ну и в шардированных коллекциях будет обманывать в большую сторону.
Ilyas
Привет парни. Как сгруппировать данные по часам?
У меня хранится объект такого типа:
{
_id:5b327abba7bd45090fecc556,
pair:BTC-BAT,
date:2018-06-26T17:41:15.126Z,
volume: 76160.96741849463,
askName:liqui,
bidName:bittrex,
askPrice:0.0000371714305997196,
bidPrice:0.000037914859211713974
}
Ilyas
Понял. Нужно было сделать так: {
$group: {
_id: { $hour: "$date" }
}
}
Bat
ребята, про блокировки в wiredtiger. пишу в одну коллекцию, читаю из другой. результат получаю только когда запись прошла. почем глобальный лок то?
Slava
Andru
const t1 = await Model.find().populate('log');
Должно так работать в монгусе? Нужны все записи модели с запопулейченными рефками. Чет не популейтит вот так, как я выше написал.
Andru
const modelSchema = new Schema(
{
log: {
type: Schema.Types.ObjectId,
ref: 'log',
unique: true
},
status: {
type: Number,
required: true,
index: true
}
},
{
timestamps: {
createdAt: 'created_at',
updatedAt: 'updated_at'
}
}
);
Andru
даже если findOne делать, то хрен
Yurii
а модель 'log' объявлена?
Andru
ммм, где она должна быть объявлена?
Andru
ну конечно это есть у каждой модели
Andru
log: {
type: Schema.Types.ObjectId,
ref: 'log',
unique: true
}
из-за unique здесь не может быть проблем? ща уберу попробую
pinelover
Привет! Подскажите пожалуйста, кто реализовывал микросервисную архитектуру с несколькими типами пользователей, как лучше организовать хранение пользовательских данных - в разных сервисах для разных типов пользователей, или разные collections для разных типов юзеров в одном пользовательском сервисе? + сервис авторизации отдельно
Yurii
вот это:
ref: 'log',
и:
mongoose.model('log', LogShema)
слово 'log' через константу?
Andru
Yurii
это я сюда в чат написал для простоты
ну ты же понимаешь связь между ref и mongoose.model ?
Я уточняю, потому, что это может не работать, так как нет модели в памяти монгуса, на которую ты делаешь ref...
Andru
а то обычно начинают спрашивать "что за константа", "что за переменная"
Yurii
Yurii
Andru
да уже без него попробовал - не зашло, уже не знаю куда смотреть, сравниваю две модели - вроде все сходится, только одна работает, другая нет ))
Andru
Andru
вот что пишет Mongoose: orders_log.find({}, { fields: {} })
Andru
orders_log - это моя Model
Andru
ща напишу 1 в 1 как у меня
Andru
Модель:
const Schema = mongoose.Schema;
const modelSchema = new Schema(
{
dropLog: {
type: Schema.Types.ObjectId,
ref: tools.TBL.DROP_LOG,
unique: true
},
balanceLog: {
type: Schema.Types.ObjectId,
ref: tools.TBL.BALANCE_LOG,
unique: true
},
status: {
type: Number,
required: true,
index: true
}
},
{
collection: tools.TBL.ORDERS_LOG,
timestamps: {
createdAt: 'created_at',
updatedAt: 'updated_at'
}
}
);
const Model = mongoose.model(tools.TBL.ORDERS_LOG, modelSchema);
module.exports = Model;
Роутер:
const Orders = require('../models/orders_log');
const t1 = await Orders.find().populate(tools.TBL.BALANCE_LOG);
Andru
ну документы из модели ORDERS_LOG оно мне выдает же
Andru
да сделал
Andru
результат есть, а вот в монгусе никак не хочет
yopp
Stable: 4.0.0 (Jun 27, 2018) Bugfix: 3.6.5 (May 25, 2018), Legacy: 3.4.15 (May 16, 2018)
MongoDB quick overview/production notes: https://www.percona.com/live/e17/sites/default/files/slides/Running%20MongoDB%20in%20Production%20-%20FileId%20-%20115299.pdf
4.0.0: https://docs.mongodb.com/manual/release-notes/4.0/
3.6.5: https://docs.mongodb.com/manual/release-notes/3.6/#may-29-2018
3.4.15: https://docs.mongodb.com/manual/release-notes/3.4/#may-16-2018
3.2.20: https://docs.mongodb.com/manual/release-notes/3.2/#may-10-2018 (End of life: September 2018)
3.0.x: Support ended February 2018