Зачем нам нужна подбаза данных и подтаблица (при разработке системы с высокой степенью параллелизма, как спроектировать уровень базы данных)? Какое промежуточное ПО для подбаз данных и подтаблиц вы использовали? Каковы преимущества и недостатки различных промежуточных программ подбаз данных и подтаблиц? Как вы разделили базу данных по вертикали или по горизонтали?
Психологический анализ интервьюера
На самом деле, этот должен быть вовлеченВысокий параллелизм, потому что подбиблиотека и подтаблица должны бытьПоддержка высокого параллелизма и большого объема данныхдва вопроса. А сейчас по правде говоря, особенно интервью интернет-компаний, они сюда в основном приходят.Невозможно не задать такую распространенную техническую проблему подбазы данных и подтаблицы, и если вы этого не знаете, это действительно невозможно сказать!
Анализ вопросов интервью.
Зачем нам нужна подбиблиотека и подтаблица? (При проектировании системы с высокой степенью параллелизма, как следует проектировать уровень базы данных?)
Грубо говоря, подбаза данных и подтаблица — это разные вещи, не путайте их, может быть, оптическая подбаза не разделяет таблицу, а может быть, оптическая подтаблица не разделяет отделить базу данных.Это возможно.
Позвольте мне сначала выкинуть сцену для вас.
Предположим, мы небольшая компания-стартап (или новый отдел, только что появившийся из BAT-компании), и сейчас у нас 200 000 зарегистрированных пользователей, 10 000 активных пользователей в день, 1 000 однотабличных данных в день, а затем каждую секунду в течение пиковый период. Максимальное количество одновременных запросов – 10. Боже мой, с такой системой просто найди кого-нибудь с опытом работы в несколько лет, а затем приведи несколько только что обученных, и ты можешь делать все, что хочешь.
Мы не ожидали, что нам так повезет, мы столкнулись с генеральным директором, который взял нас в дорогу, и бизнес быстро развивался, через несколько месяцев количество зарегистрированных пользователей достигло 20 миллионов! 1 миллион активных пользователей в день! 100 000 единиц данных на таблицу в день! Максимальный запрос в секунду достигает 1000 в пиковый период! В то же время компания привлекла два раунда финансирования и заработала несколько сотен миллионов юаней! Оценка компании достигла ошеломляющих сотен миллионов долларов! Это ритм маленького единорога!
Ладно, все в порядке, сейчас все немного напряжены, почему? Потому что каждый день появляется еще 100 000 единиц данных, еще 3 миллиона единиц данных в месяц, а теперь у нас есть несколько миллионов единиц данных в одной таблице, и она разобьется сразу на 10 миллионов. Но еле держится. Пиковое количество запросов сейчас 1000. Мы развернули несколько машин онлайн и сделали некоторую балансировку нагрузки.База данных может поддерживать 1000 запросов в секунду. Но теперь все начинают немного волноваться, что делать дальше...
В следующие несколько месяцев, Боже мой, генеральный директор такой классный, количество пользователей компании достигло 100 миллионов, и компания продолжит привлекать миллиарды юаней! Оценка компании достигла поразительных миллиардов долларов, и в этом году она стала самой влиятельной стартап-звездой в Китае! Боже, нам так повезло.
Но мы также несчастливы, потому что в это время есть десятки миллионов активных пользователей каждый день, каждый день добавляется до 500 000 новых данных на таблицу, а общий объем данных таблицы достиг 20-30 миллионов! Я не могу этого вынести! Емкость диска базы данных постоянно расходуется! Пиковый параллелизм достигает поразительных5000~8000! Хватит шутить, бро. Уверяю вас, ваша система не может его поддерживать сейчас, он уже умер!
Хорошо, так что вы можете почти понять, что происходит с подбазой данных и подтаблицей, когда вы видите это. На самом деле, это следует за развитием бизнеса вашей компании. Чем лучше развивается бизнес вашей компании, тем больше пользователей и тем больше объем данных.Чем больше количество запросов, тем больше количество запросов у вас есть, и ваша единственная база данных не должна быть в состоянии обработать его.
подтаблица
Например, у вас есть десятки миллионов данных в одной таблице, вы уверены, что справитесь с этим? точно нет,Объем данных в одной таблице слишком велик, сильно повлияет на ваш sqlисполнение исполнения, после этого ваш sql может работать очень медленно. Вообще говоря, по моему опыту, когда одна таблица достигает нескольких миллионов, производительность будет относительно низкой, и вы заработаете таблицу.
Что означает подтаблица? Это помещение данных одной таблицы в несколько таблиц, а затем при запросе вы ищете одну таблицу. Например, таблица разделена по идентификатору пользователя, и данные пользователя помещаются в таблицу. Затем, когда вы работаете, вы можете просто управлять этой таблицей для пользователя. Таким образом, объем данных каждой таблицы можно контролировать в контролируемом диапазоне, например, каждая таблица фиксируется в пределах 2 миллионов.
Филиальная библиотека
Что означает подбиблиотека? В целом, по нашему опыту, ваша библиотека может поддерживать до 2000 одновременных операций и должна быть расширена, а здоровое значение параллелизма для одной библиотеки должно поддерживаться на уровне около 1000 в секунду, не слишком большое. Затем вы можете разделить данные одной библиотеки на несколько библиотек и получить доступ к одной библиотеке при доступе.
Это называетсяПодбиблиотека и подтаблица, Зачем вам подбиблиотека и подтаблица? Вы поняли идею.
| # | Перед подбиблиотекой и подтаблицей | После подбиблиотеки и подтаблицы |
|---|---|---|
| Параллельная поддержка | Автономное развертывание MySQL не может справиться с высокой степенью параллелизма | От одной машины до нескольких машин, MySQL может выдерживать многократный параллелизм. |
| использование диска | Емкость автономного диска MySQL почти заполнена | Разделение на несколько библиотек, использование диска сервера базы данных значительно сокращается |
| Производительность выполнения SQL | Объем данных в одной таблице слишком велик, а SQL работает все медленнее и медленнее. | Объем данных в одной таблице уменьшен, а эффективность выполнения SQL значительно повышена. |
Какое промежуточное ПО для подбаз данных и подтаблиц вы использовали? Каковы преимущества и недостатки различных промежуточных программ подбаз данных и подтаблиц?
Это на самом деле для того, чтобы увидеть, какое промежуточное программное обеспечение подбазы данных и подтаблицы вы знаете, и каковы преимущества и недостатки каждого промежуточного программного обеспечения? Какое промежуточное ПО для подбазы данных и подтаблицы вы использовали?
К более распространенным относятся:
- Cobar
- TDDL
- Atlas
- Sharding-jdbc
- Mycat
Cobar
Разработанный и открытый командой Alibaba b2b, он относится к решению прокси-уровня, которое находится между сервером приложений и сервером базы данных. Приложение получает доступ к кластеру Cobar через драйвер JDBC.Cobar разлагает SQL в соответствии с правилами SQL и секционирования базы данных, а затем распределяет его по разным экземплярам базы данных в кластере MySQL для выполнения. Его еще можно использовать в первые годы, но он не обновлялся в последние годы, и в основном его никто не использует.Это почти состояние заброшенности. Кроме того, не поддерживаются такие операции, как разделение чтения и записи, хранимые процедуры, соединения между базами данных и разбиение по страницам.
TDDL
Разработанный командой Taobao, он относится к решению клиентского уровня. Поддерживается базовый синтаксис crud и разделение чтения-записи, но не поддерживаются такие синтаксисы, как соединение и запрос к нескольким таблицам. В настоящее время он мало используется, поскольку по-прежнему опирается на систему управления конфигурацией Diamond от Taobao.
Atlas
360 является открытым исходным кодом и относится к решению прокси-уровня.Он использовался некоторыми компаниями в прошлом, но действительно есть большая проблема, что последнее техническое обслуживание сообщества было 5 лет назад. Поэтому сейчас в основном очень мало компаний, которые его используют.
Sharding-jdbc
Dangdang имеет открытый исходный код и относится к решению клиентского уровня.ShardingSphereСхема клиентского уровняShardingSphereОн также предоставляет Sharding-Proxy, схему уровня прокси. Действительно, он раньше использовался больше, потому что поддержка синтаксиса SQL тоже больше, ограничений не слишком много, и с 2019.4 он запущен для4.0.0-RC1Версия, поддерживает подбазу данных и подтаблицу, разделение чтения и записи, распределенную генерацию идентификатора, гибкую транзакцию (транзакция с максимальной эффективностью, транзакция TCC). И это правда, что раньше будет больше компаний (эта компания зарегистрировала использование на официальном сайте, вы можете видеть, что многие компании используют ее с 2017 года по настоящее время), и сообщество все еще развивает и поддерживает ее. Он относительно активен, и я лично думаю, что он актуален.Альтернативы.
Mycat
Преобразование на основе Cobar, функции поддержки программы уровня прокси-сервера очень хорошо, и текущее должно быть очень огневым и популярным промежуточным программным обеспечением базы данных, сообщество очень активно, есть некоторые компании, которые начали использовать. Но по сравнению с Sharding jdbc действительно моложе, менее опытный нрав.
Суммировать
Подводя итог, на самом деле рекомендуется рассмотреть Sharding-jdbc и Mycat, оба из которых могут быть рассмотрены.
Схема клиентского уровня Sharding-jdbcПреимущество заключается в том, что его не нужно развертывать, затраты на эксплуатацию и обслуживание низкие, не требуется вторичный запрос пересылки прокси-уровня, а производительность очень высока., но если вы сталкиваетесь с обновлением или чем-то еще, каждую систему необходимо повторно обновить и выпустить, и каждую систему необходимо повторно выпустить.связьзависимости Sharding-jdbc;
Схема уровня прокси MycatНедостаток в том, что его нужно развернуть., эксплуатировать и обслуживать набор промежуточного программного обеспечения самостоятельно, стоимость эксплуатации и обслуживания высока, ноПреимущество в том, что он прозрачен для отдельных проектов, если вы столкнулись с обновлениями и тому подобным, вы можете сделать это с помощью собственного промежуточного программного обеспечения.
Вообще говоря, эти два решения действительно можно использовать, но я лично рекомендую малым и средним компаниям выбрать Sharding-jdbc.Решение клиентского уровня легкое, а стоимость обслуживания низкая, не требуется дополнительная рабочая сила, а система сложность малых и средних компаний будет ниже и проектов не так много, но средним и крупным компаниям лучше выбрать решение уровня прокси типа Mycat, т.к. в больших может быть много систем и проектов компании, большая команда и достаточное количество персонала, поэтому лучше всего найти кого-то, кто его изучит и будет поддерживать Mycat, и тогда большое количество проектов можно будет использовать напрямую и прозрачно.
Как вы разделили базу данных по вертикали или по горизонтали?
разделить по горизонталиСмысл в том, чтобы получить данные одной таблицы в несколько таблиц нескольких библиотек, но структура таблиц каждой библиотеки одинакова, но данные в каждой таблице библиотеки разные, и данные всех таблиц библиотеки разные. до всех данных. Значение горизонтального разделения заключается в том, чтобы равномерно разместить данные в большем количестве библиотек, а затем использовать несколько библиотек для обеспечения более высокого параллелизма и использовать емкость хранения нескольких библиотек для расширения.
вертикальное разделениеозначаетРазделить таблицу с множеством полей на несколько таблиц,или несколько библиотек. Структура каждой библиотечной таблицы отличается, и каждая библиотечная таблица содержит несколько полей. Вообще говоря, это будетПоместите редко используемые поля в таблицу,ПотомПоместите больше полей с низкой частотой обращения в другую таблицу. Поскольку база данных кэшируется, чем к меньшему количеству строк вы часто обращаетесь, тем больше строк вы можете кэшировать в кэше и тем выше производительность. Обычно это делается на поверхностном уровне.
Это на самом деле довольно распространено.Я не обязательно говорю это.Многие из вас, возможно, сделали это сами, разобрав большой стол, стол заказа, стол оплаты заказа, стол заказа продукта.
иРазделение на уровне поверхности, то есть подтаблицы, превращая одну таблицу в N таблиц, то естьДержите объем данных в каждой таблице в пределах определенного диапазона, что гарантирует производительность SQL. В противном случае, чем больше объем данных в одной таблице, тем хуже производительность SQL. Как правило, это около 2 миллионов строк, не так уж и много, но это зависит от того, как вы работаете, это может быть 5 миллионов или 1 миллион. Чем сложнее ваш SQL, тем лучше сохранить одну таблицу с меньшим количеством строк.
Что ж, упомянутое выше промежуточное программное обеспечение базы данных может поддерживаться независимо от подбазы данных или подтаблицы. По сути, это промежуточное ПО может работать после вашей подбиблиотеки и подтаблицы,ПО промежуточного слоя может основываться на указанном вами значении поля., скажем, идентификатор пользователя,Автоматический маршрут к соответствующей библиотеке, а затем автоматический маршрут к соответствующей таблице.
Вы должны думать о том, как разделить базу данных и таблицу в вашем проекте? Вообще говоря, для вертикального разделения вы можете сделать это на уровне таблицы и разделить некоторые таблицы с большим количеством полей; для горизонтального разделения вы можете сказать, что вы не можете выполнять его одновременно, или объем данных слишком велик для переноса. емкость. , вы разделите ее. Вы можете решить, по какому полю разделить ее самостоятельно. Если вы разделите таблицу, подумайте об этом. Если вы разделите ее на каждую библиотеку, параллелизм и емкость будут в порядке, но таблица каждая библиотека по-прежнему Если она слишком велика, вы можете разделить таблицу и отделить таблицу, чтобы объем данных в каждой таблице не был очень большим.
И есть дваПуть подбиблиотеки подтаблицы:
- Один — разделить по диапазону, то есть в каждой библиотеке есть кусок непрерывных данных, который, как правило, основан на, например,лимит времениПриходите, но это, как правило, используется меньше, потому что легко генерировать горячие проблемы, а на последние данные приходится много трафика.
- Или равномерно распределяется по определенному хэшу поля, что чаще используется.
Преимущество в том, что расширение очень простое, ведь нужно только подготовить библиотеку на каждый месяц, а при наступлении нового месяца естественно будет написана новая библиотека; Недостаток, но большая часть запросов, это доступ к последние данные. Фактический диапазон производства зависит от сцены.
Преимущество хеш-распределения в том, что оно позволяет равномерно распределить объем данных и нагрузку запросов каждой библиотеки, недостаток в том, что расширяться хлопотнее, будет процесс миграции данных, а предыдущие данные нужно пересчитывать и хэш-значение переназначено разным библиотекам или таблице.