Aleksey
Господа, а кто нить пробовал использовать mongo in memory как замену memcached/redis ?
vveare138
мм
vveare138
а для чего
vveare138
что ты там хранить собираешься?
Aleksey
то что сейчас храню в мемкеше.
Aleksey
результаты выборок из базы данных
vveare138
тебе недостаточно тех структур данных которые предоставляет редис/мемкеш?
Aleksey
достаточно. но резервирование не радует
Aleksey
ну и по всёй видимости надо использовать не монгу а percona mongo
Евгений
Привет. Это нормальная практика, когда таскаешь uuid записей в другие документы? Типа внешние ссылки в sql
Cap
Это звоночек что на самом деле нужна была sql
Viktor
А если нужен сразу sql и document store? Использовать сразу две технологии?
Cap
Господа, а кто нить пробовал использовать mongo in memory как замену memcached/redis ?
Раз нужны быстродоступные данные в памяти то почему бы не использовать структуры данных на сервере, list, map, граф и др любой сложности, а базу использовать для сохранения на диск. Зчем выносить их во внешний redis огранниченный по функциональности?
Viktor
Сразу две не нужно
Есть разные кейсы
Cap
Есть разные кейсы
Расскажи про свой
Viktor
Есть мероприятие и список участников, сейчас сделано так, что в мероприятии хранится список участников и их статусы (собирается посетить, не придет итд) и чем больше участников, тем жирней объект. В реляционке было бы две таблицы и только в том случае, когда мне нужны все участники, я бы лез в другую таблицу или делал бы джойн для получения кортежа: айди мероприятия, название, кол-во участников по какому-то критерию
Viktor
Сейчас пока спасает то, что объект мероприятия изменяется редко после определенного момента и я его могу закешировать
Cap
Классический кейс для sql базы
Viktor
И в этом же приложении есть "анкета", с большим кол-вом атрибутов, которые удобно хранить в одном документе и у них нет внешних зависимостей
Alexander
в постгресе?
Alexander
а то мускуль не особо в джейсон умеет
Viktor
Про постгрес думал, но пока не дошли руки
Viktor
Сериализовать в json не хочу, т.к. есть поиск по полям, например find({$exists: "age"})
Cap
а то мускуль не особо в джейсон умеет
Если внутри базы по полям анкеты не нужно делать запросов - то неважно, в любой sql базе
Alexander
ну судя по всему нужно
Alexander
поэтому приволокли монгу
Viktor
Да, поэтому и не только, плюс еще удобная поддержка драйвером полиморфизма. У меня .net
Viktor
На sql такое раскладывать очень обломно
Alexander
ну хз... монго сильно начинает проседать, когда начинаются поиски по связям
Viktor
По факту мне связи нужны только в одном-двух местах на всем проекте, но они performance critical
Viktor
зато быстро
в чем скорость?
Alexander
в sql ты тоже можешь подобие find({$exists: "age"}) запилить
Alexander
age is not null
Viktor
Можно, тогда неудобно хранить\выгружать и как мне кажется доступ в монге по айдишнику быстрей, чем фильтр по таблице
Alex
а в sql доступ не по ID ? лол
Viktor
а в sql доступ не по ID ? лол
кол-во атрибутов заранее неизвестно, это не одна таблица с 25 столбиками
Alex
и что мешает в том же постгресе расширить это типом JSONB ?
Viktor
и что мешает в том же постгресе расширить это типом JSONB ?
Наверное то, что проекту 3 года, он немаленький и просто выкинуть монгу и поставить постгрес нельзя
Alex
ой да ладно это делается менее чем за неделю.
Viktor
Я сейчас не о случае в вакууме, когда я сажусь делать новый проект, а конкретно про рабочий кейс
Viktor
ЛОЛ
Alex
у меня был опыт
Viktor
По-моему слишком смелое заявление без знания кодобазы
Alex
мышки плакали кололись но упорно ели кактус :)
Alex
ну судя по тому что выше, кодобаза таки вполне стандартная
Alexander
Наверное то, что проекту 3 года, он немаленький и просто выкинуть монгу и поставить постгрес нельзя
тут в чате про постгрес был веселый кейс переезда с монги на постгре
Alexander
нет
Alexander
остались
Alexander
просто удалили монгу )))
Alex
Есть кейсы где SQL не подойдет но их скажем так ограниченное количество, и зачаствую на тех же кейсах, монга тоже не нужна будет с вероятностью весьма большой :)
Viktor
Было бы все так просто) у меня перформанс хаки завязаны на патчи в монге, придется код лопатить нехило, плюс npgsql (.net драйвер) местами очень мерзкий
Viktor
Пришлось в другом проекте даже собственный пулинг писать
Viktor
Потому что ну невыносимо было этим пользоваться
Alex
собственный пулинг много где приходится использовать, это как бы не новость
Cap
кол-во атрибутов заранее неизвестно, это не одна таблица с 25 столбиками
В sql можно к анкете присавокупить поле с метками которое проиндексировать и по которому быстро фильтровать анкеты.. В обоих мирах есть решения, тут скорее вопрос про дальнейшее развитие проекта, в какой парадигме его удобнее дальше наращивать
Viktor
Сейчас скажу
Viktor
~300 тысяч, объект в среднем 48кбайт
Alex
premature optimization as is
Viktor
premature optimization as is
Опять-таки преждевременное заявление, не понимаю зачем так говорить
Cap
Что выбираешь и за сколько мс это происходит?
Viktor
Есть набор перформанс тестов в apache jmeter
Viktor
Что выбираешь и за сколько мс это происходит?
К этой коллекции сейчас доступ в основном по id + кеш, здесь нечего оптимизировать пока что
Viktor
Там была раньше проблема, что т.к. объект жирный, то на сериализацию уходило процессорное время
Viktor
Кеш и сокращение обращений к данной коллекции решило проблему, сейчас есть коллекция, в которую чисто аппендится новый стейт, там 8.5млн объектов, там была только проблеа с group, но я вроде решил и это
Viktor
Хотя, может подскажете решение лучше
Cap
Сформулируй вопрос
Viktor
Есть коллекция, типа история стейтов, основная операция чтения - сгруппировать по признаку и взять последнее по дате. Я делаю поиск, потом сортировку по дате в обратном направлении, потом группирую по признаку и беру первое, что попадется в каждом, навесил на это индекс, проверил, что он используется для данного запроса. Сейчас покажу как выглядит запрос
Viktor
.aggregate([ { $match: { eventid: 12345, categoryid: 25 } }, { $sort: { created: -1 } } { $group: { _id: "$questionid", state: { $first: "$answerText" } } } ])
Viktor
Индекс такой { eventid: -1, categoryid: 1, created: -1, questionid:1 }
Alex
и что на этом кейсе монга реально будет быстрее чем РСУБД ? вроде все банально
Viktor
и что на этом кейсе монга реально будет быстрее чем РСУБД ? вроде все банально
нет, не будет, я же говорю, что сейчас нельзя взять и просто переехать на рсубд
Viktor
товарищи, я понимаю, что проще сказать "перепиши на %технология нэйм%", но давайте предметно обсудим можно ли здесь что-то еще улучшить или нет
Alexander
в связи с тем, что монга может терять данные и это было учтено в проектировании, мы просто стёрли монгу и поставили постгрес