Anonymous
Подскажите хорошие онлайн курсы, где сертификат получить можно по сабжу?
tenni
https://university.mongodb.com
yopp
yopp
Чанки будут разрежённые
yopp
Хотя.
yopp
Да, всё правильно. У тебя буду чанки неравномерно заполнены, что скорее всего приведёт к перекосам в количестве данных после балансировки.
yopp
Но это зависит в первую очередь от документов. Если у них большой разброс в размерах — может быть очень печально.
yopp
Ну и миграции будут долгие.
Nick
ну значит ничего страшного, полупустые это нормально, с перекосами думаю балансер сам справится если вдруг прям оч сильно будет
yopp
Не справится
yopp
Он тупой
yopp
Он балансирует исключительно по числу чанков
Nick
а как тогда решается?
Nick
вручную?
yopp
Вручную что?
Nick
перемещать
Nick
ну там moveChunk
yopp
Тут общие советы не работают
yopp
В общем случае решается уменьшением размера чанков
yopp
Но все зависит от шард ключа и документов
Nick
кстати а ест ьспособ вывести заполненность каждого чанка ну или размер его?
yopp
И паттернов записи. И чтения
yopp
yopp
Чанк — запись в коллекции chunks на конфиг сервере
yopp
У него считай нет размера.
yopp
Его можно посчитать сделав запрос на каждый диапазон ключа чанка
Nick
а как монга узнает что пора сплитить чанк?
Nick
тоже делает подобные запрсоы7
yopp
Там на mongod свой механизм для этого дела
yopp
https://github.com/mongodb/mongo/wiki/Sharding-Internals
Nick
спасибо почитаю
yopp
https://github.com/mongodb/mongo/blob/r3.4.2-rc0/src/mongo/s/chunk_manager.cpp#L270
yopp
Сорян, в походу в mongos
Alik
Привет. Есть объект с полем location и radius. Хочется вытянуть все такие объекты которые находятся на расстоянии своего radius а от заданной позиции используя геоиндексы. Есть следующая наработка:
model.find({
location: {
$near: {
$geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] },
$minDistance: 0,
$maxDistance: 5000,
},
}
}
Но как задать radius объекта в $maxDistance?
yopp
Никак.
yopp
А, это не в индексе
yopp
"$radius"?
yopp
хотя я не уверен что так можно
yopp
прикол в том, что надо получить значение radius из документа
yopp
как следствие эффективность индекса будет нулевая, так как поиск по индексу будет требовать чтения всех документов
yopp
тебе нужно конвернуть координаты + радиус в полигон
yopp
и искать по $geoWithin
yopp
но afaik в geojs нет возможности задать окружность, так что придётся делать аппроксимацию
yopp
В любом случае, ответ: никак :|
Alik
понял, спасибо!
Anonymous
Парни, кто-то знает редис? Повесил его перед запросом в монгу. Данные успешно кеширует, и если нужного запроса нет, то лезет в монгу. Но проблема - если я обновлю данные в монге, то редис по прежнему возвращает свои значения по этому же ключу, так как думает что у него все есть и не лезет в монгу. Как подцепить сюда логику, чтоб после апдейта монги, данные в редисе тоже обновлялись? Сервер на ноде.
Nick
с редисом не работал, но думаю помогут ключевые слова write through
Игорь
Nick
кстати а редис только из приложухи обновлять или там существуют какиенить адаптеры для БД, чтобы как раз делать read/write through?
Игорь
Nick
а консистентность?
Nick
между обновлением в кеш и в базе может пройти куча времени
Viktor
нет готовых решений (насколько я знаю), чтобы к монге прицепить редис вот так по щелчку пальцев
Viktor
пиши отдельный слой приложения, который рулит кешем
Viktor
и, скорее всего, ты придешь рано или поздно к такой идее, что кеш будет двухуровневым и там становится куда все интересней, чем просто закешировать результат запроса
Anonymous
Anonymous
Это вне приложения настраивать?
Nick
просто я использую ignite в связке с pg и там у меня сделано через адаптер -это дает полноценный read/write through.
было интересно узнать есть подобное в редисе
Anonymous
Насчёт инвадидации после апдейта монги. У меня ключ в редисе это роут апи сервера. Непонятно как это с монгой увязать
Anonymous
Т.е. редис кеширует данные которые возвращает сервер. А сервер уже в свою очередь запрашивает из монги
Anonymous
Разве что обнулять, если например будут изменения в коллекции любые например. Ну в принципе ок
Anonymous
Почитаю, спс
Anonymous
Буду благодарен за ссылку по теме
Viktor
Путаешь http-кеширование с кешированием entity
Viktor
Из быстрых решений: можешь при апдейте в монге составить такой же ключ (роут) и по нему удалить в редисе
Viktor
но это костыль, конечно же
yopp
А зачем там вообще редис нужен?
yopp
Зачем он в этом случае нужен. В 90% проектов это первое что надо выпиливать.
Anonymous
Ну вот придет 1000 человек по этому роуту. Чтоб не лезть в бд каждый раз, отдавать из памяти
yopp
...
yopp
За тем, что субд для этого и придумана.
yopp
Выкинь редис и живи спокойно.
🔰ш
Думаю, что mongo и сам умеет кэшировать в памяти
🔰ш
Но это не точно
Aleksey
в коммерческой версии да.
Aleksey
Anonymous
Кэш WT?