Roman
c $expr 6 секунд с $where 43 секунды
Roman
это нормально вообще?
yopp
да
Roman
я молодец что переписал? можно меня похвалить?
Roman
можно
Nick
))
Roman
какая же монга крутая кайф
yopp
если вы будете сразу писать в базу following * 2 у вас запрос вообще без математики будет
Roman
я думал об этом изначально, но так нельзя
Roman
пользователь захочет и на 3 и на 4 и на 5
yopp
а что это вообще?
Roman
подписок в 2 раза больше чем подписчиков
Roman
детектим ботов короче
Nick
а может просто коэффициент писать?
Nick
и его уже выбирать типа больше 2
Roman
а вот это офигенная идея
yopp
и это тоже да
Nick
добавил фолловера - обновил коффициент
yopp
если вы в рамках одной записи сравниваете
yopp
мне почему-то казалось что вы всю коллекцию сравниваете между собой
Roman
в рамках одной
Roman
в рамках одного документа
yopp
тогда @yatoba очень прав — считайте при обновлении
yopp
и индекс по этому полю и запрос у вас будет мгновенный
Roman
ну короче я понимаю, монгой лучше ничего вообще не считать
yopp
это не монгой, это любой базой
Roman
просто заранее понять что посчитать нужно невозможно сначала собираем базу, потом смотрим и думаем, в этом и беда вся
Andrew
тогда не стоит вписываться в шардинг
Ок, если не шардинг, то как тогда хранить большие объемы данных и иметь возможность горизонтального масштабирования? Или строить что-то типа ceph и давать монге блочные устройства? Просто избыточность сильно большая получаеться.
yopp
никак не планировать вообще
yopp
и не надо ceph в монгу
yopp
до первого терабайта вам скорее всего шардинг не потребуется и вы сможете вертикально масштабироваться
yopp
сейчас в сервер можно полтерабайта памяти воткнуть
yopp
три сервера с полтерабайта всё равно будет операционно дешевле чем бекапить шардированный кластер из пары десятков нод
yopp
вам не нужен шардинг
yopp
шардинг — ОЧЕНЬ дорогое с точки зрения операционных затрат удовольствие
yopp
если у вас ничего нет сейчас, даже не забивайте себе голову. составьте модель роста данных и заложите чекпоинт примерно около первого терабайта
Roman
вам не нужен шардинг
Тогда вопрос, когда данные будут over50tb как масштабировать?
yopp
вы читаете между строк
yopp
ещё раз: когда данных нет, шардинг не нужен
yopp
99% бизнесов умирает в первый год
yopp
так что шанса что там будет 10тб практически нет
neofetch
это как делить шкуру мертвого медведя
Andrew
Ну как бы бизнес живой (это не стартап) и он просто меняет архитектуру.
yopp
тогда ещё раз: сколько сейчас данных
yopp
и какой у вас бюджет
Andrew
Речь идет о примерно 120Tb реальных данных.
Andrew
План поднять на 9 серверах.
Andrew
Плюс монгос, плюс конфиг реплика сет.
yopp
вам это не надо
yopp
это очень дорого
yopp
а, тьфу, терабайт
yopp
тогда надо! а что в текущей архитектуре не устраивает?
Nick
походу лучше спросить как текущая структура устроена
yopp
а вообще, https://db-ai.co, приходите. я вам помогу сделать это экономически целесообразным
Andrew
а вообще, https://db-ai.co, приходите. я вам помогу сделать это экономически целесообразным
Хорошо. Спасибо всем еще раз за теорию. Попробем на тестовом стенде, если что - знаем куда идти. Еще раз спасибо ;-)
yopp
идти лучше сейчас
yopp
потому что топология без привязки к тому как вы оперируете данными — неэффективная стратегия
yopp
плюс топология меняется очень легко, а вот шард ключ — очень тяжело
yopp
9 серверов вероятно не самый оптимальный выбор, потому что 2 реплики на 120тб это 60тб на реплику, это очень много. даже если у вас индексы в 1% от данных, это уже 600Гб.
Nick
Хорошо. Спасибо всем еще раз за теорию. Попробем на тестовом стенде, если что - знаем куда идти. Еще раз спасибо ;-)
а расскажите как оно сейчас у вас стока хранится и хотя бы образно каки задачи решаеются с таким объемом данных
Max
@dd_bb я во вчерашнем решение немного проапдейтил - теперб юзаю mongoose.connection.readyState: https://gist.github.com/MaxVinogradov/117dd7784447c8768da7b406a7dee559 и теперь ко вчерашней рандомно падает +1 ошибка: MongoError: no connection available for operation and number of stored operation > 0 File "/opt/nodejs/node_modules/mongodb-core/lib/error.js", line 43, col 12, in Function.create return new MongoError(options);
Max
на графике атласа смотрю что там ещё дофига можно коннекшенов поднять
yopp
Так вы не сохраняете соединение же.
yopp
Возьмите монговский сниппет и замените там вызов подключени через драйвер на вызов подключения через монгус
Max
Так вы не сохраняете соединение же.
а разве монгуз не кешит у себя соединение?
Max
я залогировал - mongoose.connection.readyState === 1
yopp
Я не знаю как устроен монгус, но судя по этому чату — очень плохо :)
yopp
В руби Монгоид имеет внутренние именованные пулы, которые доступны через глобальный синглтон
yopp
Возможно в монгусе тоже так, и он лениво инициализирует подключения, но в этом случае промис, наверное, вообще не нужен.
yopp
Но я так понимаю что в этом случае запросы складываются в очередь, а вы ее отключили
Max
какой пропертёй?
yopp
каким образом я это сделал =)?
bufferCommands: false, bufferMaxEntries: 0,
Max
bufferCommands: false, bufferMaxEntries: 0,
до это их не было . и сейчас убрал
Max
вот думаю насколько фиговая идея подымать конекшен на каждую лямбду, а потом тушить его, не кешируя
yopp
так себе идея
yopp
ваша проблема начинается с таймаутов https://github.com/mongodb-js/mongodb-core/blob/master/lib/connection/connection.js#L250
yopp
вероятно между вызовами хендлеров проходит больше времени чем позволяет таймаут