мне 3 года, один годCRUD
десятилетний опытmarkdown
Программисты 👨🏻💻 известны как качественные игроки в Багувен круглый год
Сегодня я хочу поговорить с вами о уровне базы данных.Остин проектпродолжайте обновлять(Примечание: все базы данных, о которых мы говорим сегодня, относятся к реляционным базам данных.)
01. Выбор базы данных
Перед тем, как я опубликовал изображение того, какие технологические стеки я хотел бы представить в проекте Austin, многие люди спрашивали меня, почему центр распределенной конфигурации выбрал не Nacos, а Apollo. Но никто не спросил меня, почему я выбрал MySQL для базы данных.
Говоря о MySQL, почти все руководства по Java, встречающиеся в Интернете, используют MySQL в качестве базы данных. Каждый день я говорю о различных проблемах с базами данных в группе, почти все они связаны с MySQL, лишь немногие могут использовать PostgreSQL, Oracle или другие.
Даже когда я проходил собеседование, интервьюер не спросил меня: "Почему ваша база данных выбирает mysql? Как проходит этот технический отбор?"
Увидев это, вы думаете, у меня есть ответ? На самом деле я тоже. Посреди написания я обнаружил, что не могу назвать никаких веских причин... Поскольку я не знал, я пошел посмотреть, что говорят люди.
Причина может быть резюмирована следующим образом:
- На ранней стадии 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表
Тем не менее, мы находимся в реальной производственной средеНаверноеЭто не для разработки такой таблицы ассоциаций, а для непосредственного размещения связанных полей.избыточностьв таблице. Таким образом, при запросе вы можете напрямую найти соответствующую информацию через таблицу, не выполняя никаких действий.многоуровневая ассоциация
Если запрос выполняется по вышеописанной структуре: например, я хочу найти основную информацию об авторе статьи, то мои действия в это время таковы:
- ассоциация
author_content表
нашел статьюauthorId
- пройти через
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