keystr0ke
26.09.2017
10:36:49
Пробовал, время обработки увеличивается в полтора раза :(
В идеале, нужно сделать lookup, но получать не полные документы, а только их id
Их нужно использовать в дальнейшем
yopp
26.09.2017
10:38:48
Зачем это всё?
Google
yopp
26.09.2017
10:39:00
В смысле какая практическая задача решается
keystr0ke
26.09.2017
10:46:06
Есть связанные сущности, необходимо рассчитать некоторые связи на уровне запросов, менять схему бд и саму бд строго запрещено.
Есть упростить, то есть школы, и в каждой школе есть какое-то кол-во учеников, ученики постоянно переходят из одной школы в другую и данные о школе хранит ученик. Получая данные о школе необходимо получить кол-во учеников
Аггрегация используется потому что необходимо сортировать данные, например по кол-ву учеников
Либо по названию школы, где в названии могут использоваться символы разного регистра и хранить их уже приведенными и к одному регистру нельзя, это нужно делать каждый запрос. Вот так :(
yopp
26.09.2017
11:05:06
Почему нельзя менять схему?
А какое количество учеников в базе?
keystr0ke
26.09.2017
11:09:41
Потому что это запрещено, бд неверно спроектирована, да и подобные кейсы больше ложатся на реляционные бд, но необходимо сделать вот так :(
Кол-во учеников больше 300тысяч и постоянно растёт
yopp
26.09.2017
11:09:58
Запрещено почему?
300к печально. Какой размер документа средний?
keystr0ke
26.09.2017
11:11:02
500кб,если не ошибаюсь, может немногим меньше.
yopp
26.09.2017
11:11:19
500к на одного ученика?!
keystr0ke
26.09.2017
11:11:51
Сейчас скажу точнее
avgObjSize: 461
Google
yopp
26.09.2017
11:15:35
А. Так лучше. Итого 150 мегабайт.
Делать агрегации по коллекции учеников и не накапливать те атрибуты, которые позднее можно вытащить запросом (например список id учеников в школе)
Например если надо школы по количеству учеников сгруппировать и дальше сортировать, то нужно это делать с коллекцией учеников, а не школ.
Выбрать пару десятков школ по id — миллисекунды.
keystr0ke
26.09.2017
11:18:42
А если нужна выборка? Например нужно получить только школы у который имя директора содержит некоторую подстроку?
yopp
26.09.2017
11:19:51
Включать в запрос агрегации исключение/вхождение по id школ
Школ несколько тысяч?
keystr0ke
26.09.2017
11:20:56
Школ не много, в десятки раз меньше чем учеников, но некоторые ученики могут быть без школы, но это не проблема
И их кол-во почти не растет
yopp
26.09.2017
11:21:36
Т.е. сначала сделать запрос по нужным параметрам в коллекцию школ, получить id и включить их в агрегационный запрос к ученикам через in/nin
А вообще придти и обьяснить что дизайн надо менять.
keystr0ke
26.09.2017
11:22:48
Спасибо, это действительно выглядит логично
yopp
26.09.2017
11:23:01
На это есть время, данные у вас медленные
keystr0ke
26.09.2017
11:25:17
А, есть ещё нюанс - пагинация, на первый запрос мы можем выдернуть вообще все id
А вернуть нужно всего 20-30
yopp
26.09.2017
11:26:20
И что теперь
Если сортировка требует количества учеников, ваша схема не имеет другого решения.
На 150мб это не особая проблема
Проапгредить железо чтоб получить максимальный memory throughput
keystr0ke
26.09.2017
11:29:54
Спасибо за помощь :)
Google
Eliajah
26.09.2017
12:21:04
Как мне запушить в поле rating что-нибудь?
.
27.09.2017
10:11:08
Экспорт не умеет в tsv? в доках не вижу
Peter
27.09.2017
12:25:04
какой способ реализации пагинации самый быстрый? есть документы у которых 5+ полей, _id, name и т.д.
Фёдор
27.09.2017
13:55:56
gte lte limit
Народ, у кого самые нормальные сервера можно арендовать в России?
И чтобы ещё была возможность пачку айпи купить не очень дорого
Aleksandr
27.09.2017
13:56:54
пока servers.com устраивает
Фёдор
27.09.2017
13:57:28
Если да, то быстро ли решали?
Aleksandr
27.09.2017
13:58:03
один раз их APC вышел из строя. в течении часа решили
Фёдор
27.09.2017
14:00:32
Пачку айпи купить можно? Канал нормас?
Вижу, 97 рублей за штуку в месяц
Цены в России анальные, конечно...
Vova
27.09.2017
14:59:28
это мягко сказано
Ruslan
27.09.2017
16:55:39
Нет ? рублей в месяц?
Фёдор
27.09.2017
17:58:58
12к за E3, 248гб ссд и 32гб рам это чё то дохера
Такой конфиг за бугром стоит 4-6к
yopp
27.09.2017
17:59:22
180 евро, вполне сносно
Google
yopp
27.09.2017
18:00:08
если с хецнером или онлайн.нет не сравнивать
Фёдор
27.09.2017
18:00:34
Ага, когда на овх цена 60
А чем плох онлайн и хетцнер
yopp
27.09.2017
18:01:02
а, овх тоже можно к хецнеру и онлайну присунуть
это дискаунтеры. сравни с ценником ibm например
Фёдор
27.09.2017
18:02:42
Но сервис то там сносный
yopp
27.09.2017
18:02:52
смотря для чего
Фёдор
27.09.2017
18:02:54
По крайней мере у овх
yopp
27.09.2017
18:03:06
у овх с сетью всё как у всех
Фёдор
27.09.2017
18:03:21
Дедик, паблик Клауд, поддержка
yopp
27.09.2017
18:04:54
в любом случае это дискаунтеры
там за 12к скорее всего не самопал сдают, а какой-то вендорский сервак
Фёдор
27.09.2017
18:05:39
Ну да, делл какой то
yopp
27.09.2017
18:05:51
ну вот теперь сравни сколько делл на хецнере стоит
Фёдор
27.09.2017
18:06:08
Самое главное чтобы поддержка нормальная была
Я наслушался стори про агаву
Которая хдд меняла неделю
И мне ссыкотно стало
Vova
27.09.2017
18:15:37
у меня как раз хецнер и онлайн
единственно хецнер стал НДС с русских брать
Google
Фёдор
27.09.2017
18:41:33
Чтобы по 152 ФЗ не было вопросов, нужно будет хоститься в РФ, поэтому хетцнеры, онлайны и овх отпадают
Peter
28.09.2017
07:08:04
Ребята, views MongoDB вы юзаете? Или это ненужная фича?
Андрей
28.09.2017
08:01:32
Кто знает, как можно в агрегировании задать группировку по интервалу в 5 минут, помогите пожалуйста? Никак не придумаю
keystr0ke
28.09.2017
08:04:22
Андрей
28.09.2017
08:05:42
Мне нужно считать среднее по заданному интервалу, если выбрать интервал в 1 час - получается, а мне надо задавать произвольно количество минут, к примеру 5, и считать среднее за каждый интервал
Nick
28.09.2017
08:27:06
а в каком виде хранится дата, что за час получается а за 5 минут нет?
Андрей
28.09.2017
08:28:04
"created" : ISODate("2017-09-28T11:27:01.056Z")
Я в $project добавляю поле - 'hour': {'$hour': '$created'},
А 5 минут - опыта и ума не хватает
Aivars
28.09.2017
08:30:43
"interval": {
"$subtract": [
{ "$minute": "$created" },
{ "$mod": [{ "$minute": "$created"}, 5] }
]
}
Ne proveryal.
Андрей
28.09.2017
08:32:30
Ой, спасибо
Ruslan
28.09.2017
11:09:13
камрады, подскажите, как тестируете работу с монго? я для тестов веб приложения просто подсовывают другое имя БД и всё ок, но надо удалять БД, как это вы делаете в своих тестах
Timur
28.09.2017
11:11:54
У меня перед каждым тестом делается remove() на всех коллекциях и накатываются фикстуры
Ruslan
28.09.2017
11:13:11
ремове... а как гарантируешь, что это делается на тестовой бд?
Timur
28.09.2017
11:13:18
Ну и заново коннект происходит на каждый тест
Ruslan
28.09.2017
11:13:18
на боевой настроена аутентификация?
Timur
28.09.2017
11:13:48
Во время коннекта пишется в коннекшн путь -test + randomstring
С dev и test окружений нет доступа к проду
Ruslan
28.09.2017
11:15:24
во, рандом стринг, это хорошая идея