yopp
больших это от сотен килобайт
yopp
Напомню что через неделю, в среду, 10 июля, в коворкинге RedFactory в Москве, пройдёт первый митап нашего уютненького чятика.
Слава @victor3 расскажет про устройство транзакций в монге, их пользу и вред. А я коротко расскажу что вообще из себя представляет монга и как в ней хранить эти ваши петабайты.
Осталось меньше половины мест, успейте зарегистрироваться тут: https://db-ai.timepad.ru/event/1002648/
Будет онлайн трансляция, чтоб получить ссылку возьмите соовествующий билет
Josh
о через дорогу
Josh
стартап-комик 🤔😁
Anonymous
yopp
yopp
предпологаю что вам 30 раз мало
Anonymous
я же написал свой конфиг. не работает
const client = new MongoClient(url, {
useNewUrlParser: true,
autoReconnect: true,
reconnectTries: 60,
reconnectInterval: 1000,
});
yopp
30 раз с таймаутом в 1 секунду это всего 30 секунд окно
yopp
если вам надо очень долго то Number.MAX_VALUE или что там сейчас в роли «очень большого числа»
Anonymous
он вообще не реконнектится
Anonymous
какие 30 раз мне мало. вы вообще со мной разговариваете?
yopp
Anonymous
Нужен совет по поводу названия полей.
Допустим есть коллекция Users
Users {
id: Number,
name: String,
...,
...,
comments: [
{
id: Number,
text: String
}
]
}
И коллекция комментариев Comments
Comments {
id: Number,
text: String,
likes: Number,
date: Date,
...
...
}
Вопрос: как лучше называть id комментариев в массиве comments коллекции Users?
comment, comment_id, commentId, просто id?
Имеет ли смысл id в коллекциях называть в соответствии с таблицей, как userId, commentId ?
yopp
4.0.10 (May 31) ◦ 3.6.13 (June 10) ◦ 4.2.0-rc2 (Jun 27)
События:
• 10 июля, Москва, Первый митап нашего чята: MongoDB Meetup #1 (Бесплатно)
• Плейграунд для запросов
• Документация
• Официальные курсы по MongoDB
Stable: 4.0.10 | Bugfix: 3.6.13
Legacy: 3.4.21 (Jun 12) | Dev: 4.2.0-rc2 (Jun 27)
End of life: 3.2.21 (Dec ’18), 3.0.15 (May ’17)
yopp
Нужен совет по поводу названия полей.
Допустим есть коллекция Users
Users {
id: Number,
name: String,
...,
...,
comments: [
{
id: Number,
text: String
}
]
}
И коллекция комментариев Comments
Comments {
id: Number,
text: String,
likes: Number,
date: Date,
...
...
}
Вопрос: как лучше называть id комментариев в массиве comments коллекции Users?
comment, comment_id, commentId, просто id?
Имеет ли смысл id в коллекциях называть в соответствии с таблицей, как userId, commentId ?
так как у монги нет каких-то явных соглашений, следуйте соглашениям которые устанавливает ваш язык
yopp
https://docs.mongodb.com/master/changeStreams/#modify-change-stream-output
блин, почему они туда не добавили $merge, это же бомба была бы
yopp
https://docs.mongodb.com/master/release-notes/4.2/#kill-own-cursors 😍
yopp
@gormartsen как там твой индекс поживает? а то плохая новость: https://docs.mongodb.com/master/release-notes/4.2/#backups
надо в монгу срочно контрибьютить какой-то интерфейс для бэкапов. а то всё, шардированные окружения бекапить теперь только за бабки
Gor
@dd_bb помаленьку.
Gor
я так понял речь о атомарных бекапах
yopp
да там и так без принесения котят с большими глазами в жертву нормально не сделать консистентный слепок в шарде, не останавливая запись, а теперь с транзакциями и воще
Fire Walker
Нужен совет по поводу названия полей.
Допустим есть коллекция Users
Users {
id: Number,
name: String,
...,
...,
comments: [
{
id: Number,
text: String
}
]
}
И коллекция комментариев Comments
Comments {
id: Number,
text: String,
likes: Number,
date: Date,
...
...
}
Вопрос: как лучше называть id комментариев в массиве comments коллекции Users?
comment, comment_id, commentId, просто id?
Имеет ли смысл id в коллекциях называть в соответствии с таблицей, как userId, commentId ?
Почему не ориентДБ для этого использовать?
Fire Walker
Гораздо, гораздо-гораздо удобнее
Fire Walker
yopp
Хранить комментарии в монге тоже
Комментарии можно хранить в любом хранилище, которое позволяет искать по префиксу, так как связи между комментариями, в самом сложном случае будут представлять из себя дерево. А значит matherialized path полностью закроет все потребности.
В монге из можно хранить как минимум тремя способам https://docs.mongodb.com/ecosystem/use-cases/storing-comments/
Использовать графовые хранилища за пределами задач которые решаются с помощью теории графов будет как минимум крайне неэффективно и сложно.
Во-первых из-за специфичности архитектур, которые заточены под хранение и выборку по большим количествам рёбер. Во-вторых, из-за полного бардака с языками запросов, которые опять-же заточены под работу со слабоиерархичными данными.
Dmitrii
День добрый, может кто знает зачем в java mongodb driver два вида документов BsonDocument и Document, при этом insertOne принимает ТОЛЬКО Document?
yopp
yopp
Насколько я понимаю это исторические причины
yopp
Впрочем может быть есть какие-то неочевидные причины почему нельзя было оставить только Map<String, Object>
Но я ненастоящий сварщик и плохо говорю на джаве
yopp
Там был какой-то метод типа toJson, из которого можно по-моему сделать Document
Dmitrii
Хм, спасибо, попробую
Telegram Bots Creator
Народ подскажите пожалуйста каим методом update в монгоенджин можно добавить в поле user_id еще одно поле - словарь-- 'номер юзер айди' : список из 2 х полей
Даниил (Onix)
Всем привет.
Есть команда -
* use dbname // use users - создание DB || если DB уже есть, она станет активной
А как узнать какая БДшка активна сейчас?
(нашел ответ сам - надо было в строке набрать db)
Dezmunt
Почему бд может не обновляться? Я получаю объект из бд, обновляю его, юзаю save, в колбек сейва возвращается сохранённое значение. Но в бд в итоге пусто. Такая же фигня с update
Anonymous
Комментарии можно хранить в любом хранилище, которое позволяет искать по префиксу, так как связи между комментариями, в самом сложном случае будут представлять из себя дерево. А значит matherialized path полностью закроет все потребности.
В монге из можно хранить как минимум тремя способам https://docs.mongodb.com/ecosystem/use-cases/storing-comments/
Использовать графовые хранилища за пределами задач которые решаются с помощью теории графов будет как минимум крайне неэффективно и сложно.
Во-первых из-за специфичности архитектур, которые заточены под хранение и выборку по большим количествам рёбер. Во-вторых, из-за полного бардака с языками запросов, которые опять-же заточены под работу со слабоиерархичными данными.
Еще вопрос. Там по ссылке предлагается такая структура:
{
_id: ObjectId(...),
discussion_id: ObjectId(...),
parent_id: ObjectId(...),
slug: '34db/8bda'
full_slug: '2012.02.08.12.21.08:34db/2012.02.09.22.19.16:8bda',
posted: ISODateTime(...),
author: {
id: ObjectId(...),
name: 'Rick'
},
text: 'This is so bogus ... '
}
Вот объект author содержит id и name.
Но то же name можно получить используя populate('User', 'name').
Вопрос: когда стоит и стоит ли вообще использовать populate? Будет ли там такая большая разница в скорости запроса, что лучше хранить вспомогательную информацию типа того же name прямо непосредственно в документе (при этом подписывая себя на то, что придется поддерживать актуальность вспомогательных полей)?
Dezmunt
Ребят, а у mongoose есть чат в телеге?
Dmitry
Добрый всем
Dmitry
что делать при "file:WiredTiger.wt, connection: __wt_turtle_read, 336: WiredTiger.turtle: fatal turtle file read error: WT_NOTFOUND: item not found"
Dmitry
mongod --repair не помогает
Dmitry
mongodb36
Dmitry
удаление /tmp/mongodb-27017.sock не помогло
Dmitry
уже починил, удаление "WiredTiger.turtle" помогло
yopp
Эээ. Это же каталог коллекций
yopp
А, тьфу, .turtle, не .wt
yopp
Еще вопрос. Там по ссылке предлагается такая структура:
{
_id: ObjectId(...),
discussion_id: ObjectId(...),
parent_id: ObjectId(...),
slug: '34db/8bda'
full_slug: '2012.02.08.12.21.08:34db/2012.02.09.22.19.16:8bda',
posted: ISODateTime(...),
author: {
id: ObjectId(...),
name: 'Rick'
},
text: 'This is so bogus ... '
}
Вот объект author содержит id и name.
Но то же name можно получить используя populate('User', 'name').
Вопрос: когда стоит и стоит ли вообще использовать populate? Будет ли там такая большая разница в скорости запроса, что лучше хранить вспомогательную информацию типа того же name прямо непосредственно в документе (при этом подписывая себя на то, что придется поддерживать актуальность вспомогательных полей)?
Это зависит от количества данных и паттернов запросов.
yopp
Нормализация данных оптимизирует их под запись, денормализация оптимизирует под чтение.
Если у вас небольшой поток записи или меняются не все поля, но при этом большой объём чтений, то частичная или полная денормализация позволит уменьшить количество чтений необходимых для получения информации. Но вы абсолютно правы — ценой записи.
На мой взгляд, денормализация это метод оптимизации — разновидность кеширование. Как следствие этот метод стоит использовать когда есть реальная проблема с объемом чтения, подтверждённая метриками
Ivan
А что за черепашко-файлы?
yopp
А что за черепашко-файлы?
Afair, это конфигурация wt таблицы хранящейся в WiredTiger.wt, в которой хранится каталог неймспейсов с их настройками
Josh
Ivan
yopp
Askhat
Ребят есть кто тут шарит в mongoose?
У меня есть поле:
items: [{ type: Schema.Types.ObjectId, ref: "Item" }]
Но при создании документа, при свойстве setDefaultOnInsert я хочу, чтобы items были по дефолту пустым массивом []
Пробовал сделать так:
items: {
type: [Schema.Types.ObjectId],
ref: "Item",
default: []
}
Но в этом случае, когда я пытаюсь сделать .populate('items'), у меня ref не цепляется и ссылается сам на себя.
А в первом случае при добавлении .populate('items'), ref подцепляется и работает всё ок, но в таком варианте мне не подходит то, что при создании нет пустого массива
Кто знает как правильно реализовать defaults?
yopp
Новинки которые завезут в 4.2 одном месте:
https://webassets.mongodb.com/mongodb_whats_new_4.2.pdf
Josh
Ребят есть кто тут шарит в mongoose?
У меня есть поле:
items: [{ type: Schema.Types.ObjectId, ref: "Item" }]
Но при создании документа, при свойстве setDefaultOnInsert я хочу, чтобы items были по дефолту пустым массивом []
Пробовал сделать так:
items: {
type: [Schema.Types.ObjectId],
ref: "Item",
default: []
}
Но в этом случае, когда я пытаюсь сделать .populate('items'), у меня ref не цепляется и ссылается сам на себя.
А в первом случае при добавлении .populate('items'), ref подцепляется и работает всё ок, но в таком варианте мне не подходит то, что при создании нет пустого массива
Кто знает как правильно реализовать defaults?
Arrays are special because they implicitly have a default value of [] (empty array).
Askhat
То есть мне не нужно указывать default? При получении документа, я просто не получаю этого поля если у меня не чем его заполнить
Semyon V
При добавлении ноды к реплика-сету получаю странную ситуацию - какой-то странный трафик идёт от той и к той ноде, но нет трафика ни с одной другой ноды к этой новой. Сама она находится в состоянии STARTUP, подключиться к ней удалённо получается, но спустя какое-то время она переходит в состояние “(not reachable/healthy)” с ошибкой “connection refused”
yopp
Semyon V
всё так - не резолвились имена. спасибо
Sardor
ребят, можно оператором как-нибудь юзать $push, чтобы при отсутствии документа в бд, создавался новый? Задал третьим параметром {new: true}, но документ так и не создает
yopp
yopp
а, но у вас там upasert
yopp
Напоминаю, что у нашего чята первый митап!
10 июля в Москве, в коворкинге RedFactory, совершенно бесплатно
На этой встрече Слава @victor3 расскажет о том, почему не все транзакции одинаково полезны, а Алекс @dd_bb об инструментах для масштабирования.
Записывайтесь вот тут: https://db-ai.timepad.ru/event/1002648/
Хотите выступить с докладом на следующем митапе? Заполните заявку
Anonymous
ребята, кто может подсказать как правильно реализовать комментарии к посту в монге?
у меня есть новостной пост, у него инфа, текст.
есть комментарии. я хочу их отдельно сделать. как их связать с самим постом?
Anonymous
создавать в бд вместе с постом объект комментов, а в объекте поста оставлять айдишник объекта комментов?
yopp
Anonymous
я понял, спасибо
Anonymous
в принципе я так и думал
Ivan
привет!
А есть ли способ вытащить коллекцию из фс, не поднимая монгу?
Ivan
я такого не нашёл в гугле
yopp
yopp
можно конечно через wt cli расковырять, но это очень плохая идея
yopp
проще и надежнее поднять монгу