Я выбрал MySQL и SpringData JPA

Java задняя часть Java EE
Я выбрал MySQL и SpringData JPA

мне 3 года, один годCRUDдесятилетний опытmarkdownПрограммисты 👨🏻‍💻 известны как качественные игроки в Багувен круглый год

Сегодня я хочу поговорить с вами о уровне базы данных.Остин проектпродолжайте обновлять(Примечание: все базы данных, о которых мы говорим сегодня, относятся к реляционным базам данных.)

01. Выбор базы данных

Перед тем, как я опубликовал изображение того, какие технологические стеки я хотел бы представить в проекте Austin, многие люди спрашивали меня, почему центр распределенной конфигурации выбрал не Nacos, а Apollo. Но никто не спросил меня, почему я выбрал MySQL для базы данных.

Говоря о MySQL, почти все руководства по Java, встречающиеся в Интернете, используют MySQL в качестве базы данных. Каждый день я говорю о различных проблемах с базами данных в группе, почти все они связаны с MySQL, лишь немногие могут использовать PostgreSQL, Oracle или другие.

Даже когда я проходил собеседование, интервьюер не спросил меня: "Почему ваша база данных выбирает mysql? Как проходит этот технический отбор?"

Увидев это, вы думаете, у меня есть ответ? На самом деле я тоже. Посреди написания я обнаружил, что не могу назвать никаких веских причин... Поскольку я не знал, я пошел посмотреть, что говорят люди.

Ууху. Call.com/question/21…

Причина может быть резюмирована следующим образом:

  • На ранней стадии MySQL была бесплатной, с открытым исходным кодом и простой в использовании, и она создавала экологию от многих производителей. С экологией трудно быть убитым. (самое важное)
  • Интернет использует MySQL для хранения данных как «недорогое и быстрое решение для хранения и вставки данных», и требования относительно низкие (Я расскажу об этом подробно позже)
  • Во многих случаях выбор той или иной технологии не является технической причиной.

А у меня только MySQL. Я использовал MySQL только в производственной среде, с Oracle я познакомился, когда был новичком, но сейчас почти забыл об этом.

Во многих случаях выбор той или иной технологии не является технической причиной.(Я ленивая собака, признаю это). В последние годы PostgreSQL очень популярен.Я слышал, что во многих местах лучше, чем MySQL.Заинтересованные партнеры могут заменить MySQL проекта austin на PostgreSQL.

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

Друзья, которые следят за мной в проекте Austin, должны иметь некоторое представление о реляционных базах данных, и я не буду здесь объяснять основы. Студенты, которые интересуются MySQL или готовятся к собеседованию, можете посмотреть мой "онлайн-интервьюер》 серия глав о MySQL (получила хорошие отзывы на основных платформах для ведения блогов)

02. Выбор фреймворка ORM

Помню, когда я впервые столкнулся с базами данных и Java несколько лет назад, я использовал JDBC для подключения к базе данных для работы с данными.

Что касается того, почему есть такой вопрос, я не понимаю, как я думал (ха-ха-ха-ха). Позже я выяснил позже, но также узнаю много «упрощенного шаблона JDBC» процедурной осанки (DBUtils/Hibernate/Spring JDBC/Mybatis/SpringData JPA)

То, с чем я столкнулся в производственной среде,Mybatis, но на этот раз в своем проекте asutin я решил использоватьSpringData JPAв качестве ORM-фреймворка.

03. Опыт использования баз данных

Последние два года я работаю в интернет-компании, поэтому расскажу о том, с чем столкнулся лично, и поделюсь своим мнением.

Вообще говоря, каждая бизнес-команда поддерживает свою собственную базу данных (бизнес-команда может иметь несколько библиотек), и когда нам понадобятся соответствующие данные определенной команды, команда предоставит соответствующий RPC-интерфейс для внутреннего использования компанией.

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

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

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

Для очень простого и, возможно, неуместного сценария: автор может написать несколько статей (это означает, что несколько статей будут принадлежать одному и тому же автору).author:content(1:N)

То есть начинающие, некоторые учебники могут быть разработаны так:author表,content表,autor_content_mapping表

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

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

  1. ассоциацияauthor_content表нашел статьюauthorId
  2. пройти черезauthorIdидтиauthor表Найдите основную информацию об авторе

Если яauthorIdсохранить прямо вcontent表средний, значит меньшеauthor_contentтабличный запрос.

Примечание: Я не говорю, что вы должны хранить всю информацию в одной таблице, в одной таблице сотни полей, не поймите меня неправильно!

Говоря об ассоциации, есть еще одна тема, о которой можно поговорить:join(Я говорил об этой теме в моей группе обмена, но это также то, что все видно). Проекты, которые я подвергался воздействию в моей предыдущей компании, вmapper.xmlне вижуjoinфигура, я пишуjoinтолько вhiveИспользуется при написании скриптов статистики.

[Обязательно] Регистрация запрещена для более чем трех столов. Типы данных полей, которые необходимо объединить, должны быть абсолютно согласованными; при запросе нескольких таблиц убедитесь, что связанные поля должны иметь индексы.

Примечание. Обратите внимание на индексы таблиц и производительность SQL даже при объединении двойных таблиц.

нравится использоватьjoinскажу тебе: я пишуjoinупростит код. Слишком хлопотно проверять данные, данные для проверки будут храниться в нескольких таблицах и использоваться напрямую.joinизЭффективность разработкисамый быстрый!

А я, я поддерживаюПишите бизнес-логику в кодеиз. Все это однотабличные запросы, и данные связаны в программном коде (что может JOIN базы данных, она должна уметь это делать в программе). Преимущества этого:SQL прост, SQL легко использовать повторно, а SQL легко оптимизировать.

В подавляющем большинстве случаев нашиВсе узкие места в интерфейсе связаны с «базой данных»., а не сервер приложений. Множественные JOIN и сложный SQL не так просто оптимизировать, а простой SQL лучше оптимизировать, и я думаюПрограмма логики имеет тенденцию быть легче поддерживать, чем SQL.

За два года работы в интернет-компании реляционная база данных находится в моем познании, это какПоддержка транзакцийхранения. Если данные, которые мы храним, не требуют транзакций, может вообще не быть необходимости хранить их в реляционной базе данных.

текущий источник данныхслишком много вариантов, мы можем хранить данные в Redis (база данных в памяти), Elasticsearch (поисковая система), HBase (распределенное масштабируемое хранилище больших данных), HDFS (распределенная файловая система), clickhouse (система хранения OLAP) и т. д.

Основываясь на этом фоне выше, я бы не стал выполнять сложные SQL-запросы, поэтомуSpring Data JPAРазве это не подходит мне хорошо?

04. Базы данных вне разработки

Когда вы идете в компанию определенного масштаба, там будет инфраструктура, связанная с базой данных.Следующее является общей инфраструктурой.

один, DDL и DML требуют рабочих заданий

Теория базы данных производственной среды не может быть изменена в программе путем написания собственного интерфейса (действие с высоким риском), а необходимость исправления данных или построения таблицы должна быть рассмотрена системой нарядов на работу (обычно ответственным лицом). базы данных + DBA)

Например, если вы отправляете приложение Meter, DBA увидит, будет ли ваш дизайн разумной (есть ли пример и т. Д.)

два, DQL-запрос онлайн-данных требует разрешения

Если мы хотим запросить онлайн-данные, нам обычно нужно подать заявку на разрешение базы данных.После получения разрешения мы можем запросить данные на определенной странице интрасети компании (обычно нам нужно только запросить данные внутри команды , так что на самом деле ничего страшного, у других команд права доступа к БД не открыты, и данные можно получить только через интерфейс)

три, программа вообще напрямую к БД не подключается (будет прокси слой)

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

Четыре, Полный мониторинг и сигнализация

Как одно из важных хранилищ (если зависнет, сильно повлияет на БД), так и будет полный мониторинг и алармы. Например, алармы при невыполнении SQL, алармы при медленном выполнении SQL и т.д., отслеживают различные показатели базы данных в режиме реального времени.

05. Таблица сборки AUSTIN DDL

Если есть учащиеся, которые заранее просмотрели, они должны знать, что вaustin.sqlДалее я поставил DDL двух таблиц. Чтобы все поняли, что я делаю, позвольте мне объяснить, что означает DDL этих двух таблиц (зачем мне нужно строить эти две таблицы)

отmessage_templateДавайте начнем объяснять эту таблицу Я добавил комментарии ко всем полям, которые должны быть относительно просты для понимания.

Примечание:Если программа отстает от аннотации базы данных из-за расширения, ее все равно необходимо обновить (на благо будущих поколений)

Нам нужно сделать так, чтобы у всех сообщений был "носитель", то есть, грубо говоряшаблон, шаблон является краеугольным камнем системы Austin (с помощью шаблона вы можете выполнять бизнес-обработку, отслеживать источник, статистику данных и расширять полный набор построения...)

Давайте поговорим о нескольких областях, по которым у вас могут возникнуть вопросы:

  • audit_statusа такжеflow_id: Шаблоны необходимо пройти перед отправкойаудит(Это очень важно при отправке сообщений, что в значительной степени предотвратит неправильную отправку сообщений (я думаю, вы также можете видеть, что крупные компании сообщали о сообщениях о неправильной отправке сообщений)
  • msg_typeТип сообщения: отдельные типы сообщений, которые вы можетеРазные типы идут разными путямиРеализовать изоляцию сообщений (даже если маркетинговые сообщения заблокированы, это не повлияет на уведомления)
  • send_accountУчетная запись отправки: в одном канале для отправки может быть несколько учетных записей (например, канал электронной почты может выбирать разные группы электронной почты для отправки, а канал SMS может выбирать учетные записи разных типов SMS для отправки).
  • deduplication_timeа такжеis_ngiht_shieldПравила платформы: Как компонент (платформа) отправляющего типа она должна иметьУниверсальныйправило. А дедупликацию и ночное экранирование очень удобно делать в платформе
  • msg_conteng: Это поле отправляется как содержимое сообщенияосновной, разные каналы соответствуют разным форматам, и непосредственно JSON я буду хранить в нем позже. служба поддержкиЗаполнительспособ заменить
  • ...

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

Посмотрите нижеsms_recordТаблица, по сути, эта таблица многого не может сказать (то есть хранить записи об отправке СМС и получении СМС). Его функция состоит в том, чтобы, с одной стороны, отслеживать, почему текстовое сообщение, отправленное пользователю, не удается, а с другой стороны, сопоставлять эти записи для согласования.

06. Резюме

На самом деле эта статья хочет, чтобы я рассказал о том, что база данных играет очень важную роль, и если она зависнет, это окажет большое влияние. Но в то же время мы частолегкий” использовать его (через простой SQL), он существует много раз, потому чтоОн хорошо поддерживает транзакции(строгая согласованность данных).

Данные, которым мы можем больше всего доверять, хранятся в базе данных, а другое хранилище, о потере которого мы можем беспокоиться, слишком много, не в режиме реального времени и т. д. (это самое большое преимущество базы данных перед другим хранилищем).

Я точно не прав, не берите мою за критерий, можем пообщаться в комментариях

Обратите внимание на мой публичный аккаунт WeChat【Java3y】Помимо технологий, я также расскажу о повседневной жизни, некоторые слова можно сказать только тихо~[Онлайн-интервьюер + написание Java-проектов с нуля]Непрерывное высокоинтенсивное обновление! попросить звезду! !Оригинал это не просто! ! Проси три! !

Ссылка на гите:gitee.com/austin

Ссылка на гитхаб:github.com/austin