
yopp
01.09.2017
10:14:43
Он тупой
Он балансирует исключительно по числу чанков

Nick
01.09.2017
10:15:21
а как тогда решается?
вручную?

Google

yopp
01.09.2017
10:15:33
Вручную что?

Nick
01.09.2017
10:15:43
перемещать
ну там moveChunk

yopp
01.09.2017
10:16:10
Тут общие советы не работают
В общем случае решается уменьшением размера чанков
Но все зависит от шард ключа и документов

Nick
01.09.2017
10:17:16
кстати а ест ьспособ вывести заполненность каждого чанка ну или размер его?

yopp
01.09.2017
10:17:24
И паттернов записи. И чтения
Чанк — запись в коллекции chunks на конфиг сервере
У него считай нет размера.
Его можно посчитать сделав запрос на каждый диапазон ключа чанка

Nick
01.09.2017
10:19:05
а как монга узнает что пора сплитить чанк?

Google

Nick
01.09.2017
10:19:16
тоже делает подобные запрсоы7

yopp
01.09.2017
10:19:35
Там на mongod свой механизм для этого дела
https://github.com/mongodb/mongo/wiki/Sharding-Internals

Nick
01.09.2017
10:24:57
спасибо почитаю

yopp
01.09.2017
10:27:35
https://github.com/mongodb/mongo/blob/r3.4.2-rc0/src/mongo/s/chunk_manager.cpp#L270
Сорян, в походу в mongos

Alik
01.09.2017
13:43:16
Привет. Есть объект с полем location и radius. Хочется вытянуть все такие объекты которые находятся на расстоянии своего radius а от заданной позиции используя геоиндексы. Есть следующая наработка:
model.find({
location: {
$near: {
$geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] },
$minDistance: 0,
$maxDistance: 5000,
},
}
}
Но как задать radius объекта в $maxDistance?

yopp
01.09.2017
13:48:13
Никак.
А, это не в индексе
"$radius"?
хотя я не уверен что так можно
прикол в том, что надо получить значение radius из документа
как следствие эффективность индекса будет нулевая, так как поиск по индексу будет требовать чтения всех документов
тебе нужно конвернуть координаты + радиус в полигон
и искать по $geoWithin
но afaik в geojs нет возможности задать окружность, так что придётся делать аппроксимацию
В любом случае, ответ: никак :|

Alik
01.09.2017
14:01:23
понял, спасибо!

æ digital
04.09.2017
10:30:09
Парни, кто-то знает редис? Повесил его перед запросом в монгу. Данные успешно кеширует, и если нужного запроса нет, то лезет в монгу. Но проблема - если я обновлю данные в монге, то редис по прежнему возвращает свои значения по этому же ключу, так как думает что у него все есть и не лезет в монгу. Как подцепить сюда логику, чтоб после апдейта монги, данные в редисе тоже обновлялись? Сервер на ноде.

Nick
04.09.2017
10:39:08
с редисом не работал, но думаю помогут ключевые слова write through

Google

Игорь
04.09.2017
10:42:33

Nick
04.09.2017
10:43:36
кстати а редис только из приложухи обновлять или там существуют какиенить адаптеры для БД, чтобы как раз делать read/write through?

Aivars
04.09.2017
10:44:24

Игорь
04.09.2017
10:44:31

Nick
04.09.2017
10:44:46
а консистентность?
между обновлением в кеш и в базе может пройти куча времени

Viktor
04.09.2017
10:46:28
нет готовых решений (насколько я знаю), чтобы к монге прицепить редис вот так по щелчку пальцев
пиши отдельный слой приложения, который рулит кешем
и, скорее всего, ты придешь рано или поздно к такой идее, что кеш будет двухуровневым и там становится куда все интересней, чем просто закешировать результат запроса

æ digital
04.09.2017
10:48:27
Это вне приложения настраивать?

Nick
04.09.2017
10:49:17
просто я использую ignite в связке с pg и там у меня сделано через адаптер -это дает полноценный read/write through.
было интересно узнать есть подобное в редисе

æ digital
04.09.2017
10:52:09
Насчёт инвадидации после апдейта монги. У меня ключ в редисе это роут апи сервера. Непонятно как это с монгой увязать
Т.е. редис кеширует данные которые возвращает сервер. А сервер уже в свою очередь запрашивает из монги
Разве что обнулять, если например будут изменения в коллекции любые например. Ну в принципе ок
Почитаю, спс
Буду благодарен за ссылку по теме

Viktor
04.09.2017
10:54:41
Путаешь http-кеширование с кешированием entity
Из быстрых решений: можешь при апдейте в монге составить такой же ключ (роут) и по нему удалить в редисе
но это костыль, конечно же

Google

yopp
04.09.2017
11:13:01
А зачем там вообще редис нужен?

Viktor
04.09.2017
11:51:43

yopp
04.09.2017
11:52:30
Зачем он в этом случае нужен. В 90% проектов это первое что надо выпиливать.

æ digital
04.09.2017
12:03:18
Ну вот придет 1000 человек по этому роуту. Чтоб не лезть в бд каждый раз, отдавать из памяти

yopp
04.09.2017
12:06:22
...
За тем, что субд для этого и придумана.
Выкинь редис и живи спокойно.

?ш
04.09.2017
12:08:36
Думаю, что mongo и сам умеет кэшировать в памяти
Но это не точно

Алексей
04.09.2017
12:09:11
в коммерческой версии да.

yopp
04.09.2017
12:13:33

Алексей
04.09.2017
12:13:56

æ digital
04.09.2017
12:23:11
Кэш WT?

Aivars
04.09.2017
12:23:33
"Горячая" область кэшируется.

æ digital
04.09.2017
12:24:19
Что да. Я спрашиваю что за хрень)))

Aivars
04.09.2017
12:25:28
Что да. Я спрашиваю что за хрень)))
В движке WiredTiger предусмотрено кэширование.
https://docs.mongodb.com/manual/core/wiredtiger/
With WiredTiger, MongoDB utilizes both the WiredTiger internal cache and the filesystem cache.
Starting in 3.4, the WiredTiger internal cache, by default, will use the larger of either:
50% of RAM minus 1 GB, or
256 MB.

David
04.09.2017
12:37:16
Этим кэшем нельзя управлять. Нельзя задать eviction policy для объектов. И этот кэш не будет распределенным. Потому мне кажется, что вы не совсем то советуете человеку.

Aivars
04.09.2017
12:38:55

Google

Aivars
04.09.2017
12:39:00
Redis хранит ключи в оперативке.
Кэш WiredTiger - тоже.
То есть по сути это лишняя прослойка получается.
Если задача - просто кэшировать результаты.

yopp
04.09.2017
13:07:49