по СУБД в целом (если не по адресу, то пните в нужную сторону, пожалуйста). Я не понимаю, каким образом, могут работать несколько экземпляров СУБД одновременно, если они все обращаются к одному и тому же файлу БД? Или этих файлов тоже создаётся несколько штук, и они с некоторой периодичностью синхронизируются? Как тогда избежать ошибок, если, например, 2 пользователя одновременно попытались создать учётку с одинаковым юзернеймом? У меня в голове каша, так что прошу прощения за такие глупые вопросы)
что-то я твой вопрос не очень понял. Несколько экземпляров СУБД работать с одной datadir не могут. несколько инстансов с разными datadir на одном сервере работать могут (при соблюдении разных портов, разных сокетов, разных логов)
Ну, я имею в виду, когда у сервиса очень высокая нагрузка, то поднимают несколько экземпляров СУБД для обслуживания пользователей. Запросы, как я понимаю, идут к одним и тем же БД. Вот и вопрос, как экземпляры СУБД доступ к БД делят, ибо это же очевидное бутылочное горлышко.
google://репликация
в классической схеме есть master (куда пишут) и сколько-то slave, откуда можно только читать.
Репликация — это дублирование данных, когда данные с одного сервера полностью повторяются на других Значит, БД тоже дублируется
Спасибо, значит механизм я +- верно понял.
СУБД потому и называется СУБД, что она всё сама разруливает. Как - зависит от конкретной СУБД. MySQL создаёт OS thread на каждое соединение, PostgreSQL - процесс
Да, дублируется, конечно.
Это помогает при масштабировании чтения (размазываем запросы чтения через какой-нибудь балансировщик на N реплик). Если упёрлись в запись, то нужно шардирование (дробление баз/таблиц на куски по какому-то признаку)
Тот забавный момент, когда про то, как работают БД внутри я знаю больше своих коллег, и при этом вот таких простых важных вещей не знаю У меня вопрос. Может, где-то собрана информация, как работают под капотом различные движки БД? Что именно гуглить? Сорцы читать не предлагать — я охренею
а какие движки кроме innodb тебе нужны? экзотика типа MyRocksdb?
Помимо движков, поддерживаемых MySQL/MariaDB (как минимум, есть ещё Aria и Mroonga. Не считая всяких Spyder, TokuDB ...) хотелось бы понимать ещё и про постгрю (тут у меня ппц пробел)
MySQL - книги Expert MySQL by Charles Bell, MySQL Internals by Sasha Pachev, MySQL Plugins by Sergei Golubchick and Andrew Hutchings. Блоги - Jeremy Cole Мануал - doxygen на сайте dev.mysql.com
По PostgreSQL отличные книги выложены на сайте компании PostgreSQL Professional. Они ещё и на русском. У них ещё и тренинг есть по внутренностям, тоже бесплатный.
Помимо репликации есть еще кластеры. И кластеры бывают разные. Есть shared nothing архитектура, есть shared disk. На пример Oracle RAC - как раз shared disk. И да, в нем несколько экземпляров (инстансев) работают с одной и той же базой данный (файлами данных), которая находится на «расшаренном диске». Вопрос в том, какие проблемы должен решать кластер. Как кластер «разруливает» обращение к одним и тем же файлам зависит от конкретной реализации.
AWSовская аврора вроде тоже с одними и теми же файлами работает мульти-инстансно. Вот бы это в опенсорс попало когда-нибудь
не заработает же
А откуда такое мнение?
из их презентаций. я мог не всё уловить, но понял так. Репликация у них точно не бинлоговая (внутри региона)
Ну в документации у них так написано - The Aurora shared storage architecture makes your data independent from the DB instances in the cluster. For example, you can add a DB instance quickly because Aurora doesn't make a new copy of the table data. Instead, the DB instance connects to the shared volume that already contains all your data.
Я прочитал "MySQL Internals by Sasha Pachev" (к сожалению, остальные найти в pdf не удалось). И я не нашёл ответов на свои вопросы Также я перелопатил википедию на предмет структур данных — варианты b-tree, LSM-tree, варианты R-tree Вопрос следующий. Мне не удалось найти информацию, с каким профилем нагрузки хорошо работают популярные движки MySQL / MariaDB? 1) InnoDB. Какая структура данных на диске в контексте О-нотации? Нашёл про 2 ещё актуальных на сегодня формата таблиц InnoDB — и там тоже нет ответа. Подозреваю, что вариация b-tree со всеми вытекающими — я прав или нет? 2) RocksDB. Структура данных — LSM-tree. Прикол LSM-tree в том, что там по сути 2 дерева, но есть вариации (LSMb / Diff-index). И вот далее я ничего не понимаю. Окей, понятно, что вставка в LSM-tree происходит быстро. А вот с апдейтами я ничего не понял. Что в конечном счёте происходит с SSTable? Как там хранятся данные? Какая его структура. Как работают апдейты и делиты? 3) Aria и Mroonga. Оба — форки MyISAM. Я ещё не добрался до их документации (в плане совсем вглубь не копал). Вопросы те же. Мета. В сущности меня интересует производительность О-нотация для CRUD разных движков, их сильные и слабые стороны. Может, я неправильно гуглил?
Обсуждают сегодня