Никогда с таким не сталкивался, но появилась необходимость разработать систему, которая бы создавала сайты, что называется, на лету. Если в двух словах, то есть главный сайт, где пользователь регистрируется и может создавать новые сайты (допустим, блоги). Количество сайтов ограничивается лишь его тарифом. Движок для сайтов есть, он требует соединение с базой. База состоит из ~10 таблиц. Сайт коннектится только к своей и не имеет доступа к другим, основной же (родительский) сайт имеет рутовые права и доступ ко всем.
Создание самих сайтов я реализовал, однако остался вопрос с базами.
Самое первое, что приходит на ум - создавать базы для каждого сайта (пользователей сейчас не учитываем). Но даже пустая база занимает место. Но это не так страшно, тут можно что-то оптимизировать, а вот то, что меня волнует больше всего: хранится ли в оперативной памяти информация обо всех базах на сервере? Знаю, что всё в MySQL хранится на диске, а в оперативной памяти находятся кэши, буферы, ну и всякая информация, которая не зависит от данных.
Я вычитал вот это:
Каждый файл индексов и файл данных открываются сразу для каждого параллельно работающего потока. Для каждого параллельного потока выделяется место в памяти для структуры таблицы, структур столбцов для каждого столбца и буфер размером 3 * n (где n представляет максимальную длину строки без учета столбцов BLOB)."
Я правильно понимаю, что для каждого соединения, MySQL сервер загружает информацию о таблицах, индексах и прочем? Ведь если да, то если взять за n количество баз, то при n, стремящимся к бесконечности, бесконечным будет и занимаемая память у сайта, который видит все, что не круто.
Можно для каждого пользователя создавать одну базу, где в таблицах использовать поле "user" и индексировать его. Ведь по-умолчанию, индексы строятся в виде двоичного дерева, поэтому время поиска будет что-то вроде lg n, что даже при большом количестве записей не плохо.
Можно еще проще - создать одну базу вообще для всех, но использовать уже два поля - user и site. Сложность поиска тоже будет lg n даже так.
Может быть я что-то неправильно понимаю? Я вроде шарю в устройстве MySQL, но такую простую задачу не могу решить. Даже стыдно.
Короче, сформулирую свой вопрос кратко:
Что конкретно MySQL хранит в оперативной памяти и как размер занимаемой памяти зависит от количества баз и таблиц в ней? Речь именно об оперативной, а не о хранилище. Все базы в пределах одного инстанса MySQL.
Может быть кто-то подскажет, как лучше реализовать систему создания сайтов: создавать базы для каждого сайта, для каждого пользователя или отдельную базу вообще для всех?
Буду рад, если кто-то откликнется.
Я хочу знать как можно распарсить аудиозаписи из ВКПервоначально я подумал скачать все через расширение по типу savefrom
На данный вопрос уже ответили:
Установлен composer на хостинг, мне необходимо залить обновления библиотек для Drupal
Никак не могу добиться выбора родителя для произвольного типа поста в wpВот типа поста что есть