Как стать автором
Обновить
2.2

MongoDB *

Документо-ориентированная система управления БД

Сначала показывать
Порог рейтинга
Уровень сложности

MongoDB и исследование рынка ИТ-вакансий

Время на прочтение9 мин
Количество просмотров7K
Вы когда-нибудь анализировали вакансии?

Задавались вопросом, в каких технологиях наиболее сильна потребность рынка труда на текущий момент? Месяц назад? Год назад?

Как часто открываются новые вакансии Java-разработчиков в определенном районе Вашего города и как активно они закрываются?

В этой статье я расскажу Вам, как можно достичь желаемого результата и построить отчетную систему по интересующей нас теме. Поехали!


(Источник картинки)
Читать дальше →
Всего голосов 18: ↑17 и ↓1+16
Комментарии2

Как уже сейчас пощупать транзакции в MongoDB

Время на прочтение7 мин
Количество просмотров15K

Летом 2018 года (т.е. прямо сейчас, на момент написания данной статьи) случилось невероятное — в MongoDB завезли честные ACID транзакции. С выходом четвёртой версии этой документ-ориентированной СУБД, её можно использовать для чуть более серьёзных приложений.


Для тех, кто в танке, в двух словах: транзакции позволяют нам провести серию изменений в нескольких документах и сохранить их разом, либо так же разом отменить все вносимые в рамках транзакции изменения, если что-то пошло не так, либо произошел сбой в приложении.


К сожалению, разработчику воспользоваться этой супер-фичей не так-то просто. Ниже я расскажу почему, и что с этим всем делать.

Погнали!
Всего голосов 27: ↑25 и ↓2+23
Комментарии0

JOIN в NoSQL базах данных

Время на прочтение7 мин
Количество просмотров21K
В этом сообщении будут рассмотрены способы соединения коллекций в NoSQL базах данных mongodb, arangodb, orientdb и rethinkdb (помимо того, что это NoSQL базы данных, их объединяет еще и наличие бесплатной версии с достаточно лояльной лицензией). В реляционных базах данных аналогичная функциональность реализуется при помощи SQL JOIN. Несмотря на то, что CRUD — операции в NoSQL базах данных очень похожи и различаются только в деталях, например, в одной базе данных для создания объекта используется функция create({… }), в другой — insert({… }), а в третьей — save({… }), — реализация выборки из двух и более коллекций в каждой из баз данных реализована совершенно по-разному. Поэтому будет интересно выполнить на всех базах данных одинаковую выборку. Для всех баз будет рассмотрено получение выборки (связь типа многие-ко многим) для двух таблиц.
Читать дальше →
Всего голосов 19: ↑16 и ↓3+13
Комментарии4

graphql — оптимизация запросов к базе данных

Время на прочтение6 мин
Количество просмотров9.7K
При работе с базами данных существует проблема которую принято называть «SELECT N + 1» — это когда приложение вместо одного запроса к базе данных, который выбирает все необходимые данные из нескольких связанных таблиц, коллекций, — делает дополнительный подзапрос для каждой строки результата первого запроса, чтобы получить связанные данные. Например, сначала мы получаем список студентов университета, в котором его специальность обозначена идентификатором, а потом для каждого из студентов делаем дополнительный подзапрос в таблицу или коллекцию специальностей, чтобы по идентификатору специальности получить наименование специальности. Поскольку каждый из подзапросов может потребовать еще один подзапрос, и еще один подзапрос — колчество запросов к базе данных начинает расти в геометрической прогрессии.

При работе с graphql очень просто породить проблему «SELECT N + 1», если в resolver-функции сделать подзапрос к связанной таблице. Первое что приходит в голову — сделать запрос сразу с учетом всех связанных данных, но это, согласитесь, нерационально, если связанные данные не запрашиваются клиентом.

Один из вариантов решения проблемы «SELECT N + 1» для graphql будет рассмотрен в этом сообщении.
Читать дальше →
Всего голосов 16: ↑11 и ↓5+6
Комментарии10

Истории

Maraquia — ORM для MongoDB

Время на прочтение7 мин
Количество просмотров14K

После прочтения заголовка у многих наверняка возникает вопрос — зачем ещё один велосипед при наличии уже обкатанных Mongoose, Mongorito, TypeORM и т. д.? Для ответа нужно разобраться в чём отличие ORM от ODM. Смотрим википедию:


ORM (англ. Object-Relational Mapping, рус. объектно-реляционное отображение, или преобразование) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».

То есть ORM — это именно про реляционное представление данных. Напомню, в реляционных БД нет возможности просто взять и встроить документ в поле другого документа (в этой статье записи таблиц тоже называются документами, хоть это и некорректно), можно конечно хранить в поле JSON в виде строки, но индекс по данным в нём сделать не выйдет. Вместо этого используются "ссылки" — в поле, где должен быть вложенный документ, вместо него записывается его идентификатор, а сам документ с этим идентификатором сохраняется в соседней таблице. ORM умеет работать с такими ссылками — записи по ним автоматически сразу или лениво забираются из БД, а при сохранении не нужно сперва сохранять дочерний документ, брать назначенный ему идентификатор, записывать его в поле родительского документа и только после этого сохранять родительский документ. Нужно просто попросить ORM сохранить родительский документ и всё что с ним связано, а он (object-relational mapper) уже сам разберётся как это правильно сделать. ODM же наоборот, не умеет работать с такими ссылками, зато знает про встроенные документы.

Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Комментарии19

Нечеткий поиск (fuzzy search) в реляционных базах данных

Время на прочтение4 мин
Количество просмотров14K
Для поиска нужной информации на веб-сайтах и в мобильных приложениях часто используется поиск по словам или фразам, которые пользователь свободно вводит с клавиатуры (а не выбирает например из списка). Естественно, что пользователь может допускать ошибки и опечатки. В этом случае полнотекстовый поиск, полнотекстовые индексы, которые реализованы в большинстве баз данных не дают ожидаемого результата и практически бесполезны. Такой функционал все чаще реализуют на основе elasticsearch.

Решения с использованием elasticsearch имеют один существенный недостаток — очень большая вероятность рассогласования основной базы данных, например PostgreSQL, MySQL, mongodb и elasticsearch, в которой хранятся индексы для поиска.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии6

Может поможет

Время на прочтение1 мин
Количество просмотров23K

Есть предложение. В связи с блокировками, давайте все массово просто попросим. Я понимаю, смешно. Но что то делать нужно. На https://rkn.gov.ru/ в самом низу есть «Сообщить об ошибке (Ctrl + Enter)». Давайте писать. Просто писать.


Я писал о docs.mongodb.com.


Присоединяйтесь. Вдруг что-то изменится?

Всего голосов 86: ↑53 и ↓33+20
Комментарии129

Готовый шаблон сайта с регистрацией, юзерами и админами на Flask с базами SQL или MongoDB

Время на прочтение3 мин
Количество просмотров50K
flask

Бывает, приходится делать сайты на flask, у которых есть пользователи и админы. Чисто для себя решил как-то это стандартизировать и, главное, не терять время, когда такая задача появляется. Цель — в несколько команд получить рабочий сайт у которого есть:

  • Регистрация
  • Email подтверждение
  • Авторизация
  • Выход (logout)
  • Администраторы и роли администраторов
  • Административная, пользовательская и публичная часть сайта
  • Возможность юзера менять пароль
  • Восстановление пароля
  • Локализация для иностранных языков
Читать дальше →
Всего голосов 23: ↑21 и ↓2+19
Комментарии10

Рассуждение на тему, какую базу данных выбирать

Время на прочтение9 мин
Количество просмотров132K

Эта статья для вас, если вы:


  • выбираете базу данных для нового проекта и изучаете информацию про разные варианты;
  • считаете, что текущая база данных не устраивает вас по каким то параметрам и вы хотите ее сменить, но у вас нет хорошего специалиста;
  • просто хотите почитать в одной статье про несколько баз данных и когда можно их использовать.

Моя статья не для вас, если вы:


  • хорошо умеете готовить свою любимую БД, оптимизировать индексы, настраивать и всякое такое;
  • имеете в штате хорошего специалист, который сможет аргументировано выбрать нужный вашему проекту вариант. специалист должен быть действительно хорошим, а не «экспертом на диване»;
  • обслуживаете проект с так называемым «big data», то есть у вас огромные базы, десятки или сотни серверов в кластере и всякое такое — ну у вас как бы должен быть в штате один или несколько специалистов.

О чем пойдет речь в статье?


Я разберу в своей статьи некоторые типичные и не очень варианты выбора баз данных, а если быть более точным — подходы к выбору. Когда следует остановится на том, что используют большинство, а когда можно и задуматься над новым и неизведанным. Я опишу СУБД MySQL, PostgreSQL, MongoDB, Redis, CouchDB/PouchDB и упомяну о Aerospike с Tarantool, парочку других — но в некоторых моментах конкретный выбор не настолько принципиален. Надо понимать, что лучше изначально правильно спроектировать структуру данных, чем выбрать СУБД, а потом уже пытаться придумывать, что в ней собственно хранить.
Итак, начнем.
Читать дальше →
Всего голосов 32: ↑17 и ↓15+2
Комментарии71

Производительность выгрузки большого количества данных из Mongo в ASP.NET Core Web Api

Время на прочтение5 мин
Количество просмотров6.2K

Возникла необходимость выгрузки большого количества данных на клиент из базы MongoDB. Данные представляют собой json, с информацией о машине, полученный от GPS трекера. Эти данные поступают с интервалом в 0.5 секунды. За сутки для одной машины получается примерно 172 000 записей.


Серверный код написан на ASP.NET CORE 2.0 с использованием стандартного драйвера MongoDB.Driver 2.4.4. В процессе тестирования сервиса выяснилось значительное потребление памяти процессом Web Api приложения — порядка 700 Мб, при выполнении одного запроса. При выполнении нескольких запросов параллельно объем памяти процесса может быть больше 1 Гб. Поскольку предполагается использование сервиса в контейнере на самом дешевом дроплете с оперативной памятью в 0.7 Гб, то большое потребление оперативной памяти привело к необходимости оптимизировать процесс выгрузки данных.

Читать дальше →
Всего голосов 8: ↑7 и ↓1+6
Комментарии22

Как фронтенд-разработчику настроить базу данных

Время на прочтение6 мин
Количество просмотров17K


Недавно меня спросили, как фронтенд-разработчику проще всего сохранить пользовательские данные? Под катом — моя краткая инструкция для тех, кто с базами данных «на вы».
Читать дальше →
Всего голосов 23: ↑19 и ↓4+15
Комментарии5

Анонсирована новая версия MongoDB: будет апдейт безопасности и свежие инструменты

Время на прочтение3 мин
Количество просмотров5.7K
Компания MongoDB Inc. анонсировала следующую версию одноименной NoSQL базы данных с открытым исходным кодом — MongoDB 3.6. В ней представлены новые инструменты для разработчиков и апдейт безопасности. Последний связан с серией кибератак на компании, использующие эту СУБД.

О том, что изменили разработчики, и какие функции внедрили, расскажем далее.

Читать дальше →
Всего голосов 14: ↑10 и ↓4+6
Комментарии4

Веб-приложение на Node и Vue, часть 4: повторное использование кода

Время на прочтение12 мин
Количество просмотров12K
Перед вами четвёртая часть серии материалов, которые посвящены разработке веб-приложения Budget Manager с использованием Node.js, Vue.js и MongoDB. В первой, второй и третьей частях речь шла о создании основных серверных и клиентских компонентов приложения. Сегодня мы продолжим развитие проекта, а именно — займёмся списками документов и клиентов. Кроме того, нельзя не заметить, что к настоящему моменту сделано уже немало, поэтому вполне можно критически взглянуть на то, что получилось, и поработать над повторным использованием кода.

Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Комментарии1

Ближайшие события

MVP системы рекомендаций для GitHub за неделю

Время на прочтение9 мин
Количество просмотров4.8K

logo Напомним на всякий случай, если кто-то забыл, что GitHub – это одна из крупнейших платформ для разработки программного обеспечения и дом для многих популярных проектов с открытым исходным кодом. На страничке «Explore» GitHub вы можете найти информацию о проектах, которые набирают популярность, проектах, понравившихся людям, на которых вы подписаны, а также популярные проекты, объединенные по направлениям или языкам программирования.


Чего вы не найдете, так это персональных рекомендаций проектов, основанных на вашей активности. Это несколько удивляет, поскольку пользователи ставят огромное количество звезд различным проектам ежедневно, и это информация может быть с легкостью использована для построения рекомендаций.


В этой статье мы делимся нашим опытом построения системы рекомендаций для GitHub от идеи до реализации.

Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии7

Хакеры-вымогатели взломали более 26 000 серверов MongoDB

Время на прочтение2 мин
Количество просмотров11K
image

Исследователи информационной безопасности сообщили о новой волне атак хакеров-вымогателей на серверы с установленной MongoDB. Начиная с прошлой надели было взломано более 26 000 серверов, причем 22 000 из них были атакованы одной кибергруппой.
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии10

MongoDB на вырост

Время на прочтение15 мин
Количество просмотров40K

image Приветствую бойцов невидимого бэкенда!


Вы уже почитали обзоры MongoDB. Вероятно, прошли отличные онлайн-курсы на university.mongodb.com. Конечно, у вас уже есть многообещающий проект-прототип с использованием MongoDB.


Что мы можем ждать от MongoDB на этом этапе?


  • Удешевление хранилища — чтение с ведомых реплик экономит iops мастера, не требуется RAID, отказ одного диска не фатален.
  • Повышаем скорость разработки — можно допустить бОльшую небрежность в проектировании структур данных, т.к. мы вполне можем все исправлять на работающем приложении.
  • Повышаем отзывчивость приложения — независимо от разработки, легко увеличить число ведущих реплик или количество шардов, чтобы компенсировать возросшую нагрузку на приложение.
  • Повышаем надежность приложения — независимо от разработки, убираем единую точку отказа.

И вот, вы готовы ввязаться в бой — выпустить проект на публику.

Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии6

Создание Web API приложения с использованием .NET Core + MongoDB .NET Driver

Время на прочтение16 мин
Количество просмотров31K
Как вы уже знаете, MongoDB — это одно из наиболее развитых, open-source NoSQL решений, которое представляет собой документо-ориентированную базу данных, является кросс-платформенным, а также обеспечивает высокую производительность, доступность и простоту масштабирования.

В современных open-source веб-приложениях использование NoSQL решений получило свою популярность в связи с их нереляционным поведением. В данной статье шаг за шагом мы реализуем простое ASP.NET Core Web API приложение «записной книжки», которое будет поддерживать операции CRUD применимо к коллекции в MongoDB.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии11

Книга «Стек MEAN. Mongo, Express, Angular, Node»

Время на прочтение7 мин
Количество просмотров20K
image Обычно при веб-разработке на всех уровнях стека используются разные языки программирования. База данных MongoDB, фреймворки Express и AngularJS и технология Node.js вместе образуют стек MEAN — мощную платформу, на всех уровнях которой применяется всего один язык: JavaScript. Стек MEAN привлекателен для разработчиков и бизнеса благодаря простоте и экономичности, а конечные пользователи любят MEAN-приложения за их скорость и отзывчивость.

JavaScript достиг зрелости. Благодаря ему теперь можно создать веб-приложение от начала до конца с помощью всего одного языка программирования. Стек MEAN включает в себя лучшие в своем классе технологии в данной области. В качестве БД вы получаете MongoDB, в качестве серверного фреймворка веб-приложений — Express, в качестве клиентского фреймворка — AngularJS, а в качестве серверной платформы — Node.

Эта книга познакомит вас с каждой из этих технологий, а также с тем, как заставить их работать вместе в качестве стека. На протяжении этой книги мы создаем работающее приложение, сосредотачиваясь по очереди на каждой технологии, наблюдая, как она вписывается в общую архитектуру приложения. Так что эта книга ориентирована на практику, на то, чтобы вы освоились со всеми перечисленными технологиями и их совместным использованием.
Читать дальше →
Всего голосов 16: ↑14 и ↓2+12
Комментарии19

Как Discord хранит миллиарды сообщений

Время на прочтение10 мин
Количество просмотров92K


Discord продолжает расти быстрее, чем мы ожидали, как и пользовательский контент. Чем больше пользователей — тем больше сообщений в чате. В июле мы объявили о 40 млн сообщений в день, в декабре объявили о 100 млн, а в середине января преодолели 120 млн. Мы сразу решили хранить историю чатов вечно, так что пользователи могут вернуться в любой момент и получить доступ к своим данным с любого устройства. Это много данных, поток и объём которых нарастает, и все они должны быть доступными. Как мы это делаем? Cassandra!
Читать дальше →
Всего голосов 61: ↑60 и ↓1+59
Комментарии58

MySQL и MongoDB — когда и что лучше использовать

Время на прочтение13 мин
Количество просмотров255K


Петр Зайцев показывает разницу между MySQL и MongoDB. Это — расшифровка доклада с Highload++ 2016.

Если посмотреть такой известный DB-Engines Ranking, то можно увидеть, что в течении многих лет популярность open source баз данных растет, а коммерческих — постепенно снижается.
Всего голосов 42: ↑35 и ↓7+28
Комментарии87