Больше таблиц или больше баз данных? - PullRequest
2 голосов
/ 22 октября 2009

Я настраиваю систему для размещения блогов WordPress для пользователей сайта, который я запускаю. Прямо сейчас, все работает довольно хорошо в одной базе данных, и разные блоги работают со своими собственными таблицами (user1_posts, user_posts и т. Д.)

Несмотря на то, что это работает до сих пор, это выглядит немного грязно. Если бы в этой базе данных было 4000 таблиц, это было бы проблемой? Было бы лучше разделить это на 400 баз данных? (Или я упускаю более умный способ сделать это?)

Спасибо!

Ответы [ 7 ]

6 голосов
/ 22 октября 2009

Wordpress Mu - это то, что вам нужно

3 голосов
/ 22 октября 2009

В тот момент, когда вы вводите цифру в имя столбца, таблицы или имя базы данных, вы, скорее всего, делаете что-то не так.

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

2 голосов
/ 22 октября 2009

Добавьте столбец customer_id в свои таблицы и перейдите по вертикали

1 голос
/ 22 октября 2009

Это зависит от того, какой двигатель вы используете. Если вы используете MyISAM, производительность будет невероятно плохой, если у вас больше таблиц, чем размер кэша таблиц, установленный в my.cnf.

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

Не имеет значения, если вы используете несколько баз данных или одну и ту же, кеш таблиц для MyISAM имеет безопасный эффект.

То же самое может случиться и с другими движками, но я думаю, что эффект гораздо менее выражен (например, InnoDB не теряет кеш при закрытии таблицы, но все еще не свободен)

1 голос
/ 22 октября 2009

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

Сложно, если у вас есть таблица, где все пользователи делятся своими данными. Вот тогда вам нужно подумать о том, хотите ли вы хранить свои данные в одном месте или отдельно

0 голосов
/ 22 октября 2009

4000 столов немного большие.

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

Я не уверен, насколько это поможет !!!!

0 голосов
/ 22 октября 2009

В зависимости от размера таблицы и программного обеспечения базы данных - вы можете рассмотреть возможность разбиения.

Если таблица небольшая, а максимальная безопасность не требуется, то будет работать столбец customer_id.

4000 таблиц в схеме довольно большие, это может или не может вызвать проблемы с производительностью - в зависимости от базы данных.

поддержка 400 баз данных, вероятно, станет большой головной болью. Хорошо подумайте о текущем обслуживании - резервных копиях, обновлениях и т. Д. И о том, как вы будете их выполнять, когда у вас есть 400 баз данных. Лично я бы избежал этого маршрута.

Может быть, средняя дорога? база данных на каждые 50 клиентов?

...