yopp
yopp
почти гарантированно вы при давлении на кластер не сможете читать с реплик
Ivan
вот тут я уже не готов спорить, я лишь говорю о возможности балансировкии запросов
Ivan
остальное зависит от
Shamil
Здравствуйте! Может кто нибудь подсказать мне, как в Ноде отправлять данные клиенту с сервера, и как их забрать для дальнейшей обработки на Клиенте? Хотя бы подсказка. res.json, res.send и т.п. эффективно для этого?
yopp
и мы возвращаемся к тому что реплики не являются механизмом масштабирования.
Есть узкий диапазон случаев когда можно добавить read bandwidth
yopp
очень узкий
Ivan
ок, не готов без цифр
Ivan
спорить насколько узкий
Ivan
так как запросы на чтение могут так же нагружать
yopp
причём тут цифры
Ivan
сервер
yopp
вы себе нарисуйте на бумажке io flow
yopp
в блочное хранилище
yopp
и в память
yopp
и потом мы с вами можем ещё раз на картинке найти валдо, точнее откуда вдруг возьмётся дополнительное io
yopp
и в каких случаях
Ivan
yopp
Anonymous
аааа
Ivan
кстати помимо io есть еще и cpu и ram и network io, который тоже хочется масштабировать
Anonymous
каждый шард хранит свой срез данных
и в случай схемы выше получается что в коллекциях те самые чанки разделяются по шардам
скажем если юзеров 80, то в одном шарде будет 40 и в другом 40
yopp
yopp
у вас очень упрощённое представление ресусрной модели вычислительных систем и модели использования рерурсов базами данных
Anonymous
yopp
в реальности я ещё раз повторю: в 90% случаев реплика это просто копия данных. есть случаи, когда при соблюдении ряда условий можно использовать реплики для того чтоб добавить read bandwidth
yopp
Anonymous
если упрощённо, то да
а с какого шарда читать уже конфиг сервера рулят так понимаю
у которых хеши и прочая лабуда есть
yopp
yopp
https://docs.mongodb.com/manual/core/sharding-shard-key/
yopp
yopp
а mongos получает эту карту и использует для маршрутизации запросов
Anonymous
понял
Anonymous
вроде понял
короче 12 нод(
yopp
mongos можно положить рядом с csrs
yopp
будет 9 :)
yopp
у вас какой объём данных?
Artem
Всем привет,при запуске теста phpunit выдает ошибку MongoDB\Driver\Exception\BulkWriteException: 24: Too many open files . С чем это связано и как это исправить?
Artem
Я прочитал что способа закрыть соединение с mongodb нет.
Artem
и получается что тесты где используется mongodb соединение не закрываются а создаются новые,и вопрос как быть?
Daniil
Artem
https://stackoverflow.com/questions/40025153/how-to-close-mongodb-connection-in-php
Daniil
А вы каждый раз в тестах открываете новые соединения?
Daniil
По идее для прогона всех тестов достаточно один раз открыть соединение в начале и далее использовать его
Artem
Daniil
Откуда набирается большое количество соединений?
Artem
Artem
только вопрос вот как это узнать
Daniil
Я не знаю нюансов работы драйвера для пхп, но это очевидно какая-то ошибка или у вас в коде или в коде драйвера
Artem
Гена
Народ, вопрос очень простой и глупый может
ЧТо лучше для монги - 4 ядра или 8 ядер но чуть хуже проц?
yopp
зависит от того что является бутылочным горлышком
Гена
вот мы и ищем
Гена
два кластера
при одинаковых нагрузках разные результаты
Anonymous
yopp
40GB
а какой месячный прирост?
Anonymous
В БД находятся объекты вида
name: '...',
timestamp: ...,
price: ...
Как в aggregate() ниже получить timestamp в выводе запроса, т. е. в $project?
.aggregate([
{ $match: { timestamp: parseInt(req.params.timestamp, 10) } }, { $group: { _id: null, sum: { $sum: "$price" }, timestamp: "$timestamp" } },
{ $project: {
_id: false,
sum: true,
timestamp: true
}},
{ $limit: parseInt(req.params.limit, 10) }
])
Сейчас пишет The field 'timestamp' must be an accumulator object.
yopp
В БД находятся объекты вида
name: '...',
timestamp: ...,
price: ...
Как в aggregate() ниже получить timestamp в выводе запроса, т. е. в $project?
.aggregate([
{ $match: { timestamp: parseInt(req.params.timestamp, 10) } }, { $group: { _id: null, sum: { $sum: "$price" }, timestamp: "$timestamp" } },
{ $project: {
_id: false,
sum: true,
timestamp: true
}},
{ $limit: parseInt(req.params.limit, 10) }
])
Сейчас пишет The field 'timestamp' must be an accumulator object.
что вы пытаетесь получить?
yopp
у вас $group некорректный
yopp
группировка это операция при которой присходит слияние «аккумулятора» и текущего документа. аккумулятора и логика слияния это то что указано в $group. слияние timestamp: «$timestamp» некорректно, потому что не говорит что нужно сделать с $timestamp чтоб слить его с текущим значением timestamp
Anonymous
Этот запрос предполагается выводить объект с sum и timestamp, для которого посчитано sum.
timestamp не уникальный в БД.
yopp
https://docs.mongodb.com/manual/reference/operator/aggregation/group/#group-by-day-of-the-year
Anonymous
Ok. Как мне получить на выводе timestamp для сматченных документов?
Anonymous
На один timestamp приходится несколько price. price'ы нужно суммировать и вернуть объект с суммой price'ов (Монго возвращает массив на запрос выше) и полем timestamp: timestamp.
yopp
ознакомьтесь с туториалом по ссылке
yopp
я вам очень рекомендую прочитать всю секцию про $group
Anonymous
Прочитал. Ответа на вопрос там нет, т. к. вопрос не был о $group.
yopp
ответ на повопрос там есть, я прямо на него дал ссылку
yopp
вам нужнео сгрупировать по timestamp, а не по $null
yopp
тогда на выходе вы получите документы _id: <timestamp>, price: <сумма price документов с одинаковым timestamp>
yopp
я вам ещё раз рекомендую прочитать про то как работает $group и ознакомиться с примерами
Anonymous
Делал. Тогда в поле _id попадает не значение _id, а значение timestamp, которое не имеет отношения к $_id. Мне нужно вернуть поле timestamp со значением timestamp в нём.
yopp
если вам так принципиально иметь именно поле timestamp, то сделайте $addFields c timestamp: $_id
Anonymous
Это добавит поле в вывод. Зачем добавлять поле, которое уже существует в каждом индивидуальном документе.
yopp
тогда используйте _id
yopp
это логика группировки. в ней _id используется как поле идентифицирующее каждую отдельную группу
yopp
если вы хотите группировать по уникальным значениям timestamp, то _id будет равно каждому уникальному timestamp
yopp
потому что это идентификатор группы