yopp
Да
[object Object]
ок
Dmitriy
А введя вторую базу у вас конечно проблем не будет)))
[object Object]
yopp
Операционная сложность решений с несколькими хранилищами это O^N,
Dmitriy
С консистентностью, имхо гораздо хуже)
yopp
c 4.0 уже проще
yopp
открываем транзакцию в мускуле, открываем транзакцию в монге, удаляем документ в монге, удаляем в мускуле и дальше выбираем чей коммит будет первым
Костяныч
Костяныч
[object Object]
Костяныч
нет
тогда таблица еще одна где ключ из 2х id — id сущности и id типа атрибута
[object Object]
Костяныч
2 базы - не нужно —тогда нужно 2х фазные транзации а это дорого по ресурсам и времени
yopp
yopp
насколько быстрый?
yopp
если у вас нет объективных данных, тогда вы занимаетесь предварительной оптимизацией
yopp
значит выбирайте eav и не тратье время
[object Object]
значит выбирайте eav и не тратье время
Тоже так думаю, но меня напрягает то, что я не вижу в перспективе других вариантов. Тогда бы я мог себе сказать: "Ладно, пусть пока будет eav, когда понадобится, поменяю на X".
yopp
всё верно
yopp
потому что у вас нет представления о проблеме
yopp
потому что её нет :)
yopp
любое решение — проблема, потому что оно существует. лучшее решение, то, которого нет
yopp
в eav есть свои нюансы, но они начнут становиться реальной проблемой только на существенных объёмах
yopp
вы можете взять ключевые запросы, нагенерировать фейковых записей и посмотреть когда на модельных запросах на вашей конфигурации начнуться проблемы, записать куда-то в блокнотик и настроить мониторинг на 50% от этой цифры
yopp
и когда мониторинг зазвенит, начать изучать во что вы уперлись
Костяныч
🤴👷♂️🦸♂️🧚♀️
привет, подскажите как подготовить API с монгодб и експрессом и куда мне его запрашивать
yopp
🤴👷♂️🦸♂️🧚♀️
Alexander
First
всем привет, подскажите при асинхронных запросах в бд достаточно создать 1 клиента + 1 getDatabase -> и уже через него посылать кучу асинхронных запросов с разных потоков можно?
Denis
First
First
спс буду тестить :)
Ruslan
всем привет
делаю бэкапы, монга в докере (mvertes/mongo), и там есть volume на /data/db
как я понял, на альпине нет mongotools, и сувать сюда mongodump поэтому не хочется.
то что монга складывает в /data/db (много .wt файлов) можно уже считать за бэкап?
Ruslan
просто упаковать их самостоятельно в архив
Ruslan
или для восстановления БД ей нужны еще какие-нибудь файлы?
yopp
yopp
В остальных случаях это не резервная копия
Serhii
всем привет, как вы повышаете перфоманс запросов, я пользщуюсь монгусом, но запросы в базу по 7 секунду длятся, когда применяю метод lean, то сразу же запрос падает до 200ms, может еще есть какие-то тулзы монгуса чтобы повысить перфоманс? Проблемав в том что lean возвращает обычный обьект, а не документ, в котором есть к примеру метод save, как быть в такой ситуации?
yopp
всем привет, как вы повышаете перфоманс запросов, я пользщуюсь монгусом, но запросы в базу по 7 секунду длятся, когда применяю метод lean, то сразу же запрос падает до 200ms, может еще есть какие-то тулзы монгуса чтобы повысить перфоманс? Проблемав в том что lean возвращает обычный обьект, а не документ, в котором есть к примеру метод save, как быть в такой ситуации?
Если у вас тормозит десериализация и инициализация объектов, то или поискать нет ли в монгусе lazy методов, которые откладывают работу до реального доступа или использовать сырые объекты. Насколько я понимаю lean сырые объекты и отдаёт
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
вероятно пришло время обновить ваш дистрибутив
yopp
но на работу это не должно влиять
Alex
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",...