Pull to refresh
11
0
Даниил @minpor

Разработчик ПО

Send message

Способы хранения деревьев в реляционных базах данных c использованием ORM Hibernate

Level of difficultyMedium
Reading time33 min
Views36K

Здравствуйте! В этой статье, я постараюсь кратко рассказать о четырёх достаточно известных способах хранения деревьев с указанием преимуществ и недостатков. На идею написать подобную статью подтолкнул не раз слышимый мною вопрос: "А как это будет в Hibernate?", то есть как реализовать какой-либо из способов хранения дерева с использованием ORM Hibernate. Сразу замечу, что данная статья не является каким-либо призывом использовать именно реляционные БД для решения задач связанных с деревьями, так как понятно что реляционные базы не заточены конкретно для целей хранения\обработки таких данных. Для иерархии подходят и используются графовые базы данных. Поэтому эта статья будет полезная тем, кому необходимо по каким-либо причинам реализовать хранение дерева именно в реляционной БД. Необходимо также отметить, что и ORM Hibernate также не содержит каких-либо готовых решений из коробки для хранения\обработки деревьев по крайней мере на данный момент, поэтому реализация таких решений практически полностью ложиться на плечи разработчика. В примерах далее для полной и целостной картины, кроме сущностей(entity), рассмотрим кратко и такие базовые операции, как получение всех потомков с уровнем вложенности, получение всех родителей с уровнем вложенности, а также операции добавления, удаления и перемещения узла в дереве. В качестве примера дерева послужит структура папок на файловой системе, которая будет отражена в таблицах(е) БД. На такие моменты, как инициализация сущности(entity) не будем акцентировать внимание, полагаю что рассматривать это не имеет смысла, так как алгоритмы обхода дерева известны и описаны во многих книгах и публикациях и будут мало кому интересны. В любом случае мои реализации обхода дерева представлены на GitHub и с ними при желании можно ознакомиться.

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments7

Евгений Катышев: «OpenStreetMap подходит не для всякой информации»

Reading time9 min
Views2.9K


Евгений Катышев — UX-дизайнер и турист из Нижнего Новгорода, посвятивший OpenStreetMap последние 11 лет. Он один из немногих участников сообщества RU-OSM, который не только придумал несколько своих тегов, но еще и успешно их утвердил. Как ему это удалось, зачем это делать и почему люди теряют интерес к OSM — обо всем этом он рассказал в интервью.
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments0

Создание API на основе протокола MTProto

Reading time9 min
Views7.1K

В уже  далеком 2019 Telegram объявил конкурс на создание веб-версии своего мессенджера, в котором мне удалось поучаствовать. По итогу у меня осталась библиотека, которая может работать с API Telegram по протоколу MTProto. Полученный опыт вдохновил меня реализовать протокол MTProto для бэкенда. Разработку вел на python, так как я этот язык хорошо знаю и был уверен, что смогу на нем реализовать свою идею. Для удобства использовал библиотеку aiohttp для соединения по web-socket’у, а для описания структур использовал typings и dataclass.

Читать далее
Total votes 6: ↑6 and ↓0+6
Comments1

Реактивный SQL с jOOQ 3.15 и R2DBC

Reading time4 min
Views5.4K

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

Читать далее
Total votes 1: ↑1 and ↓0+1
Comments0

10 потенциальных SQL ошибок, которые делают программисты

Reading time6 min
Views233K
Оригинал статьи носит название «10 SQL ошибок, которые делают Java разработчики», но, по большому счёту, приведённые в ней принципы можно отнести к любому языку.



Java программисты мешают объектно-ориентированное и императивное мышление в зависимости от их уровня:
— мастерства (каждый может программировать императивно)
— догмы (шаблон для применения шаблонов где-либо и их именование)
— настроения (применять истинный объектный подход немного сложнее чем императивный)

Но всё меняется, когда Java разработчики пишут SQL код.
Читать дальше →
Total votes 80: ↑54 and ↓26+28
Comments33

Работа с базами данных глазами разработчика

Level of difficultyEasy
Reading time20 min
Views13K

Когда вы разрабатываете новый функционал с использованием базы данных, цикл разработки обычно включает следующие этапы (но не ограничивается ими):

Написание SQL миграции → написание кода → тестирование → релиз → мониторинг.

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

Поскольку мы в компании работаем с PostgreSQL, а серверный код пишем на Java, то примеры будут основаны на этом стеке, хотя большинство идей не зависят от используемой БД и языка программирования.
Читать дальше →
Total votes 10: ↑9 and ↓1+11
Comments17

Как приручить дракона или Сказочка о том, как разработчик впервые встретился с Unit-тестами

Reading time19 min
Views7.1K

Disclaimer.

Статья не содержит описание новомодных технологий или прорывы на поприще разработки. Рассматривайте её как рассказ об опыте открытия для себя мира unit тестирования.

Если вы раньше не писали unit-тесты, но хотите начать, не уверены как тестировать вашу БД и нужно ли это, не знаете как использовать моки, и для чего они, то эта статья может стать началом вашего пути.

А ещё здесь есть драконы - и это нормально.

Читать далее
Total votes 6: ↑5 and ↓1+4
Comments7

Истина прежде всего, или почему систему нужно проектировать, исходя из устройства базы данных

Reading time10 min
Views4.7K
Привет, Хабр!

Мы продолжаем исследовать тему Java и Spring, в том числе, на уровне баз данных. Сегодня предлагаем почитать о том, почему при проектировании больших приложений именно структура базы данных, а не код Java, должна иметь определяющее значение, как это делается, и какие исключения есть из этого правила.
Читать дальше →
Total votes 7: ↑5 and ↓2+5
Comments17

JOOQ и его кроличья нора. Как выжить без Hibernate

Reading time13 min
Views57K
В этой статье я не буду топить за JOOQ. Я предпочитаю Hibernate и всю силу Spring Data JPA, которая за ним стоит. Но статья будет не о них.



Когда мы пользуемся Hibernate и Spring Data JPA, нам не нужно задумываться о внутренних процессах — знай ставь аннотации и пиши правильные имена методов в репозитории — остальное за тебя сделают эти два монстра. В случае в JOOQ, к сожалению для многих, придётся малость напрячься и написать больше, чем findAllByUserId(Long userId).
Читать дальше →
Total votes 14: ↑3 and ↓11-8
Comments25

В чем разница между софт-скиллами и чертами личности

Reading time3 min
Views12K

Софт-скиллы и черты личности часто путают между собой, хотя у этих терминов совершенно разное значение. Первые измеримы и относится к профессиональным качествам, вторые — субъективны и описывают характер человека. В этой статье мы подробно разберем различия между ними:

Читать далее
Total votes 14: ↑6 and ↓8+1
Comments9

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity