yopp
Да
[object Object]
ок
Dmitriy
А введя вторую базу у вас конечно проблем не будет)))
[object Object]
А введя вторую базу у вас конечно проблем не будет)))
Проблемы будут, но не с индексацией же
yopp
Операционная сложность решений с несколькими хранилищами это O^N,
Dmitriy
С консистентностью, имхо гораздо хуже)
yopp
c 4.0 уже проще
yopp
открываем транзакцию в мускуле, открываем транзакцию в монге, удаляем документ в монге, удаляем в мускуле и дальше выбираем чей коммит будет первым
[object Object]
не судьба писать в СLOB-поле или xml или типа json которым вам легко распарсить на лету?
распарсить на лету? Мне нужны индексированные поля, по которым будет регулярно производиться поиск
Костяныч
распарсить на лету? Мне нужны индексированные поля, по которым будет регулярно производиться поиск
это по сути плоный поиск по текстовому полю тогда с выставлением сложных индексов по функциям
Костяныч
нет
тогда таблица еще одна где ключ из 2х id — id сущности и id типа атрибута
[object Object]
тогда таблица еще одна где ключ из 2х id — id сущности и id типа атрибута
ну это уже eav - первый вариант решения. Я искал другие способы
Костяныч
2 базы - не нужно —тогда нужно 2х фазные транзации а это дорого по ресурсам и времени
[object Object]
о каких объёмах речь идёт?
Объемах данных? Пока никаких, но предполагается их быстрый рост после запуска проекта
yopp
насколько быстрый?
[object Object]
насколько быстрый?
умопомрачительно быстрый))
yopp
если у вас нет объективных данных, тогда вы занимаетесь предварительной оптимизацией
yopp
значит выбирайте eav и не тратье время
[object Object]
значит выбирайте eav и не тратье время
Тоже так думаю, но меня напрягает то, что я не вижу в перспективе других вариантов. Тогда бы я мог себе сказать: "Ладно, пусть пока будет eav, когда понадобится, поменяю на X".
yopp
всё верно
yopp
потому что у вас нет представления о проблеме
yopp
потому что её нет :)
[object Object]
потому что её нет :)
eav сама по себе проблема в какой-то мере
yopp
любое решение — проблема, потому что оно существует. лучшее решение, то, которого нет
yopp
в eav есть свои нюансы, но они начнут становиться реальной проблемой только на существенных объёмах
yopp
вы можете взять ключевые запросы, нагенерировать фейковых записей и посмотреть когда на модельных запросах на вашей конфигурации начнуться проблемы, записать куда-то в блокнотик и настроить мониторинг на 50% от этой цифры
yopp
и когда мониторинг зазвенит, начать изучать во что вы уперлись
Dmitriy
распарсить на лету? Мне нужны индексированные поля, по которым будет регулярно производиться поиск
К слову сказать с 5.7.8 произведена оптимизация хранения json в мускула. В том числе и в целях увеличения скорости поиска, почитайте офф. доку
[object Object]
К слову сказать с 5.7.8 произведена оптимизация хранения json в мускула. В том числе и в целях увеличения скорости поиска, почитайте офф. доку
Да, я в курсе. Это не меняет того факта, что поля не индексируются. Это значит, что при поиске будет производиться скан всей таблицы, от начала до конца.
🤴👷‍♂️🦸‍♂️🧚‍♀️
привет, подскажите как подготовить API с монгодб и експрессом и куда мне его запрашивать
First
всем привет, подскажите при асинхронных запросах в бд достаточно создать 1 клиента + 1 getDatabase -> и уже через него посылать кучу асинхронных запросов с разных потоков можно?
First
спс буду тестить :)
Ruslan
всем привет делаю бэкапы, монга в докере (mvertes/mongo), и там есть volume на /data/db как я понял, на альпине нет mongotools, и сувать сюда mongodump поэтому не хочется. то что монга складывает в /data/db (много .wt файлов) можно уже считать за бэкап?
Ruslan
просто упаковать их самостоятельно в архив
Ruslan
или для восстановления БД ей нужны еще какие-нибудь файлы?
yopp
В остальных случаях это не резервная копия
Serhii
всем привет, как вы повышаете перфоманс запросов, я пользщуюсь монгусом, но запросы в базу по 7 секунду длятся, когда применяю метод lean, то сразу же запрос падает до 200ms, может еще есть какие-то тулзы монгуса чтобы повысить перфоманс? Проблемав в том что lean возвращает обычный обьект, а не документ, в котором есть к примеру метод save, как быть в такой ситуации?
yopp
И конечно сократить размер выборки, если все документы не нужны
Serhii
@dd_bb thx
Den
yopp
Всех с понедельником! Если вы пропустили в выходные, то у нашего сообщества появились события. Хочу чтоб мы все начали знакомиться, встречаться и делиться опытом. Ближайшие: • 25 мая, Москва, Мастер-Класс: Практическая схемотехника (6900₽): https://db-ai.timepad.ru/event/980574/ • 06 июня, Москва, Доклад на митапе Scalability Camp: От мегабайт до петабайт не расплескав смузи (Бесплатно) https://www.meetup.com/Scalability-Camp/events/261525352/ • 17–19 июня, Нью-Йорк, Конференция: MongoDB World (900$) https://www.mongodb.com/world Планируемые: • Май, Москва, Мастер-Класс: Тысяча частей или практический шардинг • Июнь, Москва, Первый MongoDB Russian митап. Если хотите выступить, присылайте темы доклада @dd_bb Планируете быть на событии? Напишите в группу. Если вы знаете о каком-то mongodb-событии в офлайне или в онлайне, пишите @dd_bb, добавим.
Serhii
кто может подсказать, почему после updateOne, в миддлвейре предыдущий статус и this.status === undefined?
Serhii
Serhii
Alex
Привет, подскажите это нормально при запуске монги: Started MongoDB Database Server. systemd[1]: [/lib/systemd/system/mongod.service:25] Unknown lvalue 'TasksMax' in section 'Service' systemd[1]: [/lib/systemd/system/mongod.service:26] Unknown lvalue 'TasksAccounting' in section 'Service' ???
yopp
вероятно пришло время обновить ваш дистрибутив
yopp
но на работу это не должно влиять
Dmitry
привет всем! Тут такая проблема. Подскажите плиз. Не пойму почему массив полученый из pipeline, не видится как массив? Есть в rails объект CustomerStatus. У него есть поле - status. Цель: получить всех клиентов которые изначально были гостями и стали мемберами. Я сделал аггрегацию вида: CustomerStatus.collection.aggregate([ { '$sort': {'self_customer_status_created_at': 1} }, {'$match': { 'self_customer_status_created_at': { "$gte": Time.parse('2017-01-17').beginning_of_month, "$lte": Time.parse('2017-01-17').end_of_month } } }, { "$facet": { "guests": [ { "$group": { "_id": "$_id", "data": { '$first': '$$ROOT' } } }, { "$match": { "data.status": "guest" } }, { "$group": { "_id":nil, "array":{ "$push": "$data.self_customer_status_id" } } }, { "$project":{ "array": 1, "_id":0 } } ], "members": [ { "$group": { "_id": "$_id", "data": { '$last': '$$ROOT' } } }, { "$match": { "data.status": "member", "data.self_customer_status_id": { "$in": { "$arrayElemAt": [ "$guests.array", 0 ] } } } } ] } }, { "$project": { "members": 1, "guests.array": 1 } } ] ).as_json
Dmitry
но в faced 'members' ни в какую не видит $guests.array как массив, и возвращает ошибку - Mongo::Error::OperationFailure: $in needs an array (2)
Nick
привет всем! Тут такая проблема. Подскажите плиз. Не пойму почему массив полученый из pipeline, не видится как массив? Есть в rails объект CustomerStatus. У него есть поле - status. Цель: получить всех клиентов которые изначально были гостями и стали мемберами. Я сделал аггрегацию вида: CustomerStatus.collection.aggregate([ { '$sort': {'self_customer_status_created_at': 1} }, {'$match': { 'self_customer_status_created_at': { "$gte": Time.parse('2017-01-17').beginning_of_month, "$lte": Time.parse('2017-01-17').end_of_month } } }, { "$facet": { "guests": [ { "$group": { "_id": "$_id", "data": { '$first': '$$ROOT' } } }, { "$match": { "data.status": "guest" } }, { "$group": { "_id":nil, "array":{ "$push": "$data.self_customer_status_id" } } }, { "$project":{ "array": 1, "_id":0 } } ], "members": [ { "$group": { "_id": "$_id", "data": { '$last': '$$ROOT' } } }, { "$match": { "data.status": "member", "data.self_customer_status_id": { "$in": { "$arrayElemAt": [ "$guests.array", 0 ] } } } } ] } }, { "$project": { "members": 1, "guests.array": 1 } } ] ).as_json
А зачнм там elementAt?
Dmitry
ну
Dmitry
это я уже потом сделал
Dmitry
для теста
Dmitry
``` CustomerStatus.collection.aggregate([ { '$sort': {'self_customer_status_created_at': 1} }, {'$match': { 'self_customer_status_created_at': { "$gte": Time.parse('2017-01-17').beginning_of_month, "$lte": Time.parse('2017-01-17').end_of_month } } }, { "$facet": { "guests": [ { "$group": { "_id": "$_id", "data": { '$first': '$$ROOT' } } }, { "$match": { "data.status": "guest" } }, { "$group": { "_id":nil, "array":{ "$push": "$data.self_customer_status_id" } } }, { "$project":{ "array": 1, "_id":0 } } ], "members": [ { "$group": { "_id": "$_id", "data": { '$last': '$$ROOT' } } }, { "$match": { "data.status": "member", "data.self_customer_status_id": { "$in": [ "$guests.array", ] } } } ] } }, { "$project": { "members": 1, "guests.array": 1 } } ] ).as_json ```
Dmitry
должно было быть так
Dmitry
получается массив [{"guests"=> [{"array"=> ["21113", "21105", "21103", "21102", "21101", "21100", "21095", "21090", "21082", "21081", "21080", "21079", "21076", "21074", "21073", "21071", "21069", ...
Nick
У ин два параметра, у вас один
Nick
И возможно вы порядок параметров путали
Dmitry
тут in работает как в find если я беру существующий id и добавляю его как параметр то на выходе получаю клиента с этим id и статусом member
Nick
Нет, тут ин работает как в агрегации
Dmitry
Nick
Может и ошибаюсь, тогда синтаксис у ин другой и вы должны туда передавать массив, а не выращение для его вычисления
Nick
Собственно как на скрине выше
Dmitry
если я даю параметр без выражения с одним массивом - то прекрасно работает. Почему-то guests.array не разрешает как массив
Nick
Потому что это вычисляемое выражение и оно недопустимо
Dmitry
если я пытаюсь запихнуть в следующий $project снова guests.array он ругается что ожидает объект а ему подсунули массив
Dmitry
даже нет, не так: Mongo::Error::OperationFailure: 'newRoot' expression must evaluate to an object, but resulting value was: "guests.array". Type of resulting value: 'string'. Input document: {_id: null, array: ["21113", "21105",...