Сергей
Artem там где name может быть все что угодно, каждое перечислять это нереально
SvPupok
Не перечисляйте
SvPupok
db.collection.find({},{“name”:1})
Сергей
Спасибо, это действительно то
Sarvar
Sarvar
Помогите пожалуйста
Nick
mysql?
Sarvar
Sarvar
В чем проблема?
Nick
гуглить и решать
Sarvar
Sarvar
Зачем группа тогда?
Nick
это группа по mongodb для начала
Sarvar
Nick
а по вопросу ничего не мешает вбить все это в гугл и уверен что первый результат вам поможет
Sarvar
Nick
тогда хорошо бы сразу указывать, что проделал вот то и то не помогло, а то все советы быдут равносильны первой ссылке
Evgeny
Подскажите, какой вариант лучше использовать с точки зрения оптимизации монго, много мелких документов или в 20 раз меньшее кол-во больших документов?
Еесть условно твиты, их около 100к, изначально они разбиты по дням. Поиск сконцентрирован в первую очередь по этим твитам. (подсчет различных полей, аналитика, агрегация и.т.п.)
1) Хранить документы Day(ид, дата) с вложенными туда твитами (ид, дата, твит)
2) Хранить документы Twit (ид, дата, твит, ид дня, дата дня)
Мечтатель
Подскажите, какой вариант лучше использовать с точки зрения оптимизации монго, много мелких документов или в 20 раз меньшее кол-во больших документов?
Еесть условно твиты, их около 100к, изначально они разбиты по дням. Поиск сконцентрирован в первую очередь по этим твитам. (подсчет различных полей, аналитика, агрегация и.т.п.)
1) Хранить документы Day(ид, дата) с вложенными туда твитами (ид, дата, твит)
2) Хранить документы Twit (ид, дата, твит, ид дня, дата дня)
зачем тебе id дня???
Evgeny
Dmitriy ну, этот момент можно опустить. суть вопроса в том что лучше - много маленьких документов или меньшее кол-во больших.
Evgeny
они все в одной коллекции будут, я просто могу там хранить либо твиты, либо дни с вложенными твитами за этот день.
SvPupok
Вы учтите тот факт, что монга в любом случае при работе читает документ целиком
Evgeny
спасибо большое за помощь!
Игорь
такой вопрос. Есть объем информации, который приходит единым блоком. В среднем по1 500 000 документов. Мне нужно просматривать предыдущею хранящуюся в базе версию и вностить изменения в соответвии с новым пришедшим блоком. Чего нет, удалить, что есть добавить. В коллекции есть четыре индекса, один из них полнотекстовый.
Я правильно понимаю, что быстрее будет просто новый блок добавить, как новую коллецию и заново пересоздать индесы, а старый удалить?
Или все таки быстрее будето частичное обновление? Процесс происходит в среднем раз в час.
SvPupok
мне кажется проще пересоздать коллекцию
SvPupok
500000 - не такая уж большая цифра
Игорь
там варьируеться число. От 500 000 до 3 500 000 документов на коллекцию. Я вот тоже думаю, что сканирование коллекции, добавление и удаление кажого документа, плюс перестроение индексов...
Игорь
будет более ресурсоемким процессом
Мечтатель
Игорь
ну по сути то, что пришло и есть мои актуальные данные. Задача в том, как их быстрее добавить в базе
Игорь
целиком все за раз и старые удалить
Nick
Для начала опредить допустим ли простой на время пока старые данные удалены, а новые не подключены
Игорь
ну я думал, можно сделать так. Сначала добавить новую коллекцию, если все ок, то старую удалать и новую переименовать в старую
Ivan
не забывай что транзакций нету, лучше писать все эти данные в какую то очередь, а после ее разбирать балками, по 50к документов, например, и делать bulk upsert
Ivan
главное не по одному документу записывай
Игорь
ну собственно по этому тоже думаю, что пересоздавать коллекцию надежней. Если бы мне приходили только данные, которые нужно изменить в старой коллекции, то другое дело. А вот тут приходит все. И старое и новое, и что удалить можно понять только сравним данные из старого по наличию в новом
Игорь
ну это уже не столь кретичные факт для меня в данной ситуации. То есть дальнейшие действия не являються критически динамическими. Скрипт, который эти данные пришет в базу их потом и обрабатывает. По этому он в любом случае дождется ответа.
со стороны юзера есть только поиск. Я думаю, что если и случиться такое, что запрос данных будет в момент обновления, в полне нормальным поведение будет написать: "Данные обновляються, повторите запрос позднее" Тем паче, что это не должно занимать много времени. Собственно юзер в моем конкретном случае должен понимать, что данные очень динамически меняются для работы и может потребоваться некоторое ожидание в работе при обновлении.
Игорь
то есть я не могу ему отдать не доконца обновленные данные
Nick
вот вы и ответили на вопрос, тогда просто пересоздаете коллекцию
Игорь
спасибо
Игорь
хотел посоветоваться
Игорь
а то малоли, я еще далеко не спец в монго)))
Nick
в общем случае дело не в монго, а в подходе, а подход зависит от требований и дальше уже сверху опредляется, какого рода костыли подбивать при работе с конкретной бд
yopp
Подскажите, какой вариант лучше использовать с точки зрения оптимизации монго, много мелких документов или в 20 раз меньшее кол-во больших документов?
Еесть условно твиты, их около 100к, изначально они разбиты по дням. Поиск сконцентрирован в первую очередь по этим твитам. (подсчет различных полей, аналитика, агрегация и.т.п.)
1) Хранить документы Day(ид, дата) с вложенными туда твитами (ид, дата, твит)
2) Хранить документы Twit (ид, дата, твит, ид дня, дата дня)
хранить так, как они потом анализируются
yopp
если вы анализируете бакеты по времени, то складывайте в один документ с упорядычеванием по времени
yopp
если по пользователю, то по времени и пользователю
yopp
там наверху резонно отметили что документ не будет вмещать в себя строго день, потому что есть ограничение на размер документа
yopp
большое количество мелких документов, когда много индексов — очень плохо
yopp
больше == миллиарды
yopp
так как у вас соотношение размеров документа и всех индексов будет в пользу индексов, а это почти всегда неэффективно
yopp
https://docs.mongodb.com/ecosystem/use-cases/storing-comments/
Dmitry
Товарищи кто какие практики/патерны/подходы/npm модули использует чобы гарантировать выполнение нескольких операций create/update с роллбэком. либо все либо ничего так сказать. пример двухфазного комита читал. интересно что у людей на практике с этим
Мечтатель
Dmitry
Ну мне прям совсем ACID не нужен. И я да. мотрел там их анонс. Что то там в примерах нет NodeJS и помоему неспроста это
Dmitry
https://stackoverflow.com/questions/23830385/how-do-acid-transactions-with-nodejs-tokumx-mongodb-any-mongodb-driver-for
Dmitry
Я так подозреваю что все пилят собственный велик на jobs/queue
Dmitry
хотя вот нашел такую оберточку еще https://github.com/e-oj/Fawn
yopp
yopp
yopp
Но если вы хотите дельного совета, расскажите о вашей бизнес-задаче. Может быть есть другой способ получить желаемый результат
Dmitry
Ну у меня есть документ который будет гарантированно создан или изменен. но иногда мне нужно вместе с этим создавать / менять документ в другой коллекции
Dmitry
только две коллекции получается должны быть консистентны
yopp
Это техническое описание проблемы
yopp
У вас денормализованные данные?
yopp
Вы обновляете связи?
yopp
Какой физический смысл этих операций?
Dmitry
немного денормализованные. данные. да. связи не обновляются после создания. рефы создаются при создании и остаются как есть
yopp
Тогда повторно оцените необходимость денормализации и если вы без неё сможете жить, у вас не будет проблем поддержания целостности
Eugene
Всем привет. расскажите плз, как справлятся без монгуса? есть ощущение что юзать монгус зашквар
Eugene
То есть монгус это топ?
Oleg
Игорь
Кстати, какая есть хорошая литература по монго? Кроме официальных доков
SvPupok
Я скидывал ссыль, но там версия 2.6