Mongo это класс
скриншот переписки
скриншот переписки
Пару дней назад сделал успешно дамп базы, сеголня решил попробовать снова и выбивает ошибку
failed: can't create session: could not connect to server: server selection error: server selection timeout, current topology: { Type: Single, Servers: [{ Addr: my-dns-name:27017, Type: Unknown, Last error: connection() error occurred during connection handshake: dial tcp: my-dns-name: no such host }, ] }
Все порт открыт и днс известен, с этим все окей, просто подключится могу
Команда для дампа:
mongodump -u admin-user -p password -- host my-dns-name --out /home/admin/backups
Каталоги ппринадлежат mongo
Если ккто встречался с подобным, не могли б помочь пожалуйста
Всем доброго времени суток. Публикую опыт моего хорошего товарища, что с математическим образованием успешно работает с С++ более 15 лет.
Оформил всё в формате текстового интервью, читаться и восприниматься будет легко, стартуем)
1. Расскажите о вашем образовании?
Мое образование — это весьма интересная штука. В школе я углубленно изучал математику, полюбил ее и с тех пор моя жизнь так или иначе связана с ней. После школы я поступил на два факультета - экономический и механико-математический. Выбрал экономическую теорию просто потому, что там была более крутая математика на вступительных экзаменах. Экономическая теория является весьма специфическим предметом, это какая-то смесь математики и философии с примерно такой же практической пользой. На самом деле ряд предметов, изученных в университете, мне очень пригодились позднее - особенно линейная алгебра, статистика, теория вероятностей и математическое программирование (раздел математики, посвященный оптимизационным задачам, ничего общего с компьютерами). Был любопытный предмет, называемый эконометрикой, по факту это статистический анализ больших данных, позволяющий найти взаимосвязи данных, прямо-таки столь популярное сейчас машинное обучение. После получения высшего образования я несколько лет проучился в Вычислительном центре РАН, тема моей так и не законченной диссертации была "Параллельные методы решения задач дискретной оптимизации транспортного типа", простыми словами я решал задачу коммивояжера. Привет математическое программирование из университета.
2. Почему вы выбрали именно C++? Чем импонирует вам данный язык программирования?
Я его не выбирал, это он меня выбрал, я честно предпринял несколько попыток уйти из него, но он всякий раз меня догонял. Последняя попытка была в Microsoft, там я писал на C#, и думал, что я такой умный и сумел уйти от C++, но как говорил один мой друг "C++ умеет ждать", и в Microsoft я опять переключился на C++. По своей воле, очень уж интересная была задача.
3. Начать профессиональную деятельность на С++ получилось благодаря самообразованию или же благодаря профильному образованию? Расскажите о своём пути в С++
Я решал задачу коммивояжера и ее варианты на C++, так уж получилось, что это был самый подходящий язык для такой задачи. Затем я начал работать в Яндексе, в отделе качества поиска над MapReduce (помните тему диссертации - "Параллельные методы..."), там тоже был C++, и он так и не отпускал меня с тех пор.
4. Есть ли книги по С++, что вы можете посоветовать?
Самыми полезными для меня были, пожалуй, серия небольших книг Скота Майерса "Эффективное использование С++" с набором рецептов, понять STL мне помогла книга Николая Джосьютиса по STL "С++. Стандартная библиотека". Но самое главное, конечно же, практика. Как язык C++ меня никогда особо не интересовал, я рассматривал его лишь как средство для решения интересных задач.
5. Расскажите о вашей компании, где вы работаете. Что входит в ваши рабочие обязанности на данный момент и чем занимается ваша компания? Какой продукт?
Я работаю Senior Software Engineer в MongoDB, компании, которая разрабатывает собственную СУБД (система управления базами данных). Моя команда занимается оптимизацией запросов (Query Optimization). MongoDB привлекла меня тем, что сумела успешно бросить вызов на рынке СУБД, казалось бы, надежно поделенного между такими гигантами как Microsoft SQL Server, Oracle и IBM DB2.
Так получилось, что с 70-х годов и исследовательского проекта реляционных баз данных IBM System R, от которого произошли современные базы данных, очень многое изменилось. Благодаря интернет-компаниям, таким как Google, стало набирать популярность горизонтальное масштабирование. Другой тип масштабирования, вертикальное, характеризуется тем, что по мере роста требований к вычислительным мощностям, старые сервера заменяют на более мощные, происходит вертикальный рост. Но такой рост всегда ограничен мощностями одного сервера. Горизонтальный рост характеризуется не заменой сервера на более мощный, а добавлением новых серверов. Это оказывается дешевле и позволяет почти неограниченно расти, но и требование к программному обеспечению гораздо выше, новый софт должен быть "распределенным", то есть работать на множестве серверов. Одна из первых попыток распределения работы на множество серверов была система MapReduce, над одной из реализаций которой я работал в Яндексе.
Классические СУБД оказались не готовы к такому повороту событий по ряду причин: изначально они были спроектированы для работы на одном сервере, и реляционная модель данных предполагает высокую нормализацию данных, грубо говоря никаких дублирующих данных, вместо сохранения адреса для каждого заказа, адрес сохраняется в отдельной таблице и каждый заказ содержит уникальный идентификатор адреса, а значит большое число джойнов (join), т. е. теперь, чтобы получить, адрес для заказа надо найти его по идентификатору в другой таблице.
MongoDB реализовала совершенно новый подход, называемый документным, все связанные данные должны хранится вместе. Это позволяет сократить число джойнов, а то и полностью избавиться от них, это опять же упрощает создание по-настоящему распределенной базы данных. Новый подход оказался коммерчески успешным, MongoDB как СУБД активно развивается, и старый query engine (движок запросов) перестал отвечать требованиям новой MongoDB. Я сейчас работаю над оптимизацией запросов в новом движке, это задача дискретной оптимизации и ее методы во многом пересекаются с моей работой над задачей коммивояжера. Также используются метод ветвей и границ (Cascades, реализованный в Microsoft SQL Server) и динамическое программирование (Oracle и IBM DB2).
6. Расскажите о проектах, в которых вы приняли участие? О проектах и их функциональных возможностях.
Я был техническом лидером проекта поиска по графу знаний, в проект входила реализация графа знаний в поисковом индексе и поддержка соответствующей грамматики поиска к примеру «файлы Йена программиста из Лондона». Мы разбивали эту фразу и обрабатывали запрос следующим образом в индексе контактов находили человека с именем Йен, должностью программист/разработчик или другой синоним из Лондона. Затем переходили по графу знаний и находили файлы, которые этот человек правил или создавал. Вы можете видеть, как работает подобный поиск в Microsoft Office 365. Если вы знаете английский язык вы можете увидеть демонстрацию вначале этого промо видео: https://youtu.be/zbqlAd6aMoE
7. Исходя из вашего опыта, на какие личные качества/навыки/компетенции в первую очередь обращают внимания работодатели в вашей сфере?
На интервью обычно проверяются три навыка:
навык решения задач и насколько эффективно человек может сформулировать и донести свои мысли о разных подходах к решению задачи, обсудить эти подходы и выбрать правильный
насколько эффективно человек умеет работать в команде, здесь оценивается множество навыков, к примеру, умение признавать свои ошибки, умение конструктивно критиковать и принимать критику, эмпатия и т.п.
проектирование систем: как реализовать тот иной сервис или функциональность в программе, начиная с выбора системы хранения данных, продолжая методами обмена данными и так далее, оценивается, в частности, то как умеет ли человек собирать требования о будущей система и как он умеет использовать требования для выбора подходящих технологий.
8. По вашему мнению, каков спрос на рынке труда и какие перспективы у данной профессии в ближайшие полгода – год, исходя из нынешней экономической ситуации?
Да все как обычно, не вижу никаких причин, чтобы что-то изменилось в ближайший год.
9. Есть ли спрос в данный момент на новичков (Junior-специалистов) в С++ ?
В MongoDB, Microsoft и т. п. активно практикуется приглашение на практику студентов ВУЗов (internship), после окончания ВУЗа студенты могут вернуться в компанию, обычно это практически единственный способ попасть новичку на работу в ведущие компании.
10. Подводя итоги. Что можете посоветовать людям, что самостоятельно изучить С++ и в дальнейшем работать в данной сфере?
Я бы порекомендовал для начала осознать, что язык программирования не так и важен, важны фундаментальные знания – линейная алгебра, статистика, алгоритмы и структуры данных. Умение применять эти знания на практике. Я не говорю, что я никогда не читал книг по языкам программирования, это не так. По одному C++ я прочитал с десяток книг, а еще я читал книги и в целом изучал такие языки как Java, C#, Python, JavaScript, Haskell, F#, OCaml, Ruby. Но это никогда не было в моих приоритетах, я понимал, что эти знания мимолетны и быстро устаревают. Что не устаревает так это общие принципы программирования (они, кстати, часто описаны в книгах по языкам программирования в том числе), алгоритмы, принципы построения систем.
К примеру, самый продвинутый Query Optimizer сегодня реализован в Microsoft SQL Server, его принципы были разработаны в 90-е годы Goetz Graefe. Этот оптимизатор используется метод ветвей и границ, разработанный в 60-е годы Литтлом для решения задачи коммивояжера. Серьезные современные передовые системы базируются на принципах, разработанных десятилетия назад.
Может показаться, что моя дорога была прямолинейной и я знал к чему иду, это неправда. У меня было много метаний и поисков, одно лишь было постоянным - я всегда любил математику и алгоритмы и стремился ими заниматься, а также я любил программирование потому, что оно даёт мне свободу выражать свои идеи во что-то работающее. Именно этот акт творчества во время программирования когда-то привёл меня в восторг, и этот восторг не отпускает меня до сих пор.
Успешного самообразование, коллеги)
Если вам интересна IT-сфера и интервью с программистами
публикую также свои статьи и интервью на канале t.me/it_begin
Подписывайтесь :)
Спасибо!
У нас новая игра: нужно расставлять по городу вышки связи так, чтобы у всех жителей был мобильный интернет. И это не так просто, как кажется. Справитесь — награда в профиль ваша. Ну что, попробуете?
Товарищи, подскажите, научите, плиз.
Я прочитал информацию по MongoDB, даже учебник нашёл и буду там черпать инфу, но у меня, скорее, идеологический вопрос!
Вот как правильно организовывать и хранить в ней данные, именно идейно правильно. Я видел рассуждения на СтекОверФлоу, но вот пока не складывается и реляционная модель плотно сидит в голове. Можно ли на каком-то примере связанных таблих и о том, как это хранить в Монге?
Пришло с почтой.
Пользователи их серверов - готовьтесь к переносу баз.
Просто информация для тех, кто, может быть, не читает почту.
Началось все года два назад, во Вконтакте я напоролся на один бот для знакомств (не буду говорить какой) и подумал, что почему бы не сделать такой же но в Телеграм, благо на тот момент мне хотелось попрактиковаться в написании ботов для телеги ну и на тот момент мне понравилась идея для бота в стиле "Знакомства"
В качестве языка программирования я выбрал Python, и сходу начал "творить"
в ходе разработки за пару месяцев я понял, что не все так просто как казалось:
1 - Bot pulling работал так себе, стабильности было маловато
2 - Библиотека telebot которую я использовал оказалась не так проста как кажется на первый взгляд
3 - Я был удивлен когда понял , что кода там будет больше чем в привычных мне скриптах на 200 строк, пришлось изучать много информации для разработчиков
4 - Инфраструктура, поднятие бота локально на ПК это хорошо, но лучше было бы что бы появился какой-то сервер
Решением проблем было такое:
Переделал бот на web hooks, теперь не мой бот опрашивал Telegram на наличие изменений
а Telegram отправлял сообщения про изменения в мой бот, но для этого пришлось научить мой код принимать то что посылает мне Телеграм, в этом мне помог flask, та же пришлось купить доменное имя (купил подешевле на Go Daddy, там за копейки можно взять доменное имя на год, ну а потом цена будет выше, ибо скидки не на всегда) + Нужен SSL, по этому "перед" ботом появился nginx в роли reverse proxy, и Lets Encrypt сертификат, дешево и сердито. Это все я начал деплоить по всем канонам Continuous Delivery на купленный мной за 5$ самый дешевый сервер (дроплет) на DigitalOcean (кстати там можно на первые 3 мес получить этот дроплет бесплатно, но это не точно) ну а в качестве хранилища кода был выбран GitHub, после того как его выкупили Майки в нем можно бесплатно создавать закрытые репы)
Но это еще не все, ибо во время работы бота нужно хранить информацию, временную и постоянную, для этого пришлось подключить БД, в качестве бд в которой хранится временная информация, был выбран redis, ну а для хранения постоянных данных моя любимая mongodb , в целом их можно было развернуть прям на сервере, но я решил сделать все красиво и купил DigitalOcean Managed базу, то есть они сами ей "управляют" а я только конфигурирую ее кнопочками 😁 но штука не дешевая, 12$ в мес за одну базу.
Но так как я это все делал один, это заняло много времени, так же в Телеграм уже появились боты такого характера и это все привело к потери у моего бота уникальности + баги + пока делал появились библиотеки для работы с API Telegram поддерживающие асинхронность.
По этому хотелось бы дать совет тем кто тоже хочет разработать какой-то свой продукт😁
что бы не напарываться на такие косяки как я, перед разработкой нужно:
1 - Разработать документацию, да, это долго, возможно олдскульно, но это важно!
в ней обязательно должна быть схема работы, и все будущие функциональные возможности продукта (Да, опытные скажут что даже если и так , рано или поздно захочется добавить то чего изначально не было описано, но это будет намного проще чем без нормальных доков, так как вы будете понимать что и зачем идет, почему этот Сlass наследуется от этого Class - а, это позволит модифицировать код не парясь о том что щас все навернется)
2 - Детально изучить актуальные технологии, если вышла 3 версия python, не нужно кодить на 2 ой =)
3 - Желательно автоматизировать обновление версий продукта, так вы потратив может день, с экономите пару месяцев на ручном обновлении и возможных фиксах во время этого в будущем
(в этом поможет terraform для управления инфраструктурой, ansible как система управления конфигурацией, ну и попробуйте контейнерезацию в виде docker - это позволит более удобно управлять версиями)
Многие скажут, да зачем все это? этим же никто не будет пользоваться ?
а если будет?) представьте что у вас привалило 10 к пользователей, а у вас один сервер на 2 ядра в полку еле работает, а код обновляется посредством scp 😁
а так даже если этим и никто не будет пользоваться вы изучите много технологий, и кто знает, может они вам пригодятся в будущих проектах 😁
Собственно вот и бот:
Функциональных возможностей немного, но хоть что-то но есть:
1 - Лайки/Дизлайки, естественно если лайкнуть кого-то ему придет сообщение что вы его
лайкнули и он сможет посмотреть ваш профиль
2 - Мультиязычность, язык интерфейса бота подстраивается под язык Telegram клиента
3 - Можно отправлять друг другу анонимные сообщения внутри бота, их видите только вы и получатель
4 - Можно получить рандомный профиль ну или просто по очереди перебирать профили
Цель бота изначально была просто попрактиковаться в написании ботов, ну а теперь им даже пользуются люди😁
Начинаем серию видео по разработке системы заметок на Python, Golang и микросервисной архитектуры. Будем писать код и конфигурировать все используемы инфраструктурные продукты, такие как ElasticSearch, logstash, Kibana, zipkin, mongoDB, postgresql. И все это в докер контейнерах и с использованием docker compose.
В этом видео мы уточним функционал и спроектируем систему, разберемся с основными микросервисами и продуктами. которые будем использовать.
Ссылка на GitHub репозиторий: https://github.com/theartofdevel/notes_system
Вопрос: нужна ли текстовая расшифровка для этой стать и для будущих?
P.S. первая статья, не знаю правильно все сделал, если нет - поправьте в комментариях - все исправлю.
P.P.S. еще есть плейлисты с уроками по Go и Python, а также еще разный контент. Буду сюда тоже постить потихоньку.