Что СЛИШКОМ БОЛЬШОЕ для базы данных?

У меня есть приятель, который запускает веб-приложение для людей, выставляющих машины на продажу. Им пользуются несколько тысяч клиентов, и у каждого клиента есть сотни, а иногда и тысячи строк в базе данных (некоторые из них существуют в течение 5 лет с сотнями продаж автомобилей каждый месяц и десятками строк за одну продажу (комментарии, сообщения, так далее)). Он запускал эту систему в одной базе данных SQL Server на одном физическом сервере с примерно 20 ГБ или ОЗУ и парой процессоров все время без проблем. Это какое-то чудо?

Как и большинство программистов, я не являюсь администратором баз данных и просто живу благодаря ORM и т. д. Куда бы я ни посмотрел, люди говорят о необходимости сегментировать или получить отдельный сервер базы данных для крупных пользователей веб-приложения. Почему это? Неужели так неэффективно иметь большую БД с партиями или строками? Должен ли я планировать использовать Cassandra или что-то подобное, или я могу рассчитывать на хорошее масштабирование с помощью Postgres?


person orokusaki    schedule 10.09.2010    source источник
comment
Слишком большой — это когда вырубают деревья или сносят старые здания, чтобы освободить место для серверов.   -  person BoltClock    schedule 11.09.2010
comment
Почему большинству программистов нужны администраторы баз данных? Разве люди больше не изучают реляционные базы данных? В любом случае, дело с шардингом и т. д. должно масштабировать производительность, когда у вас есть десятки тысяч или даже миллионы пользователей, не обязательно размер базы данных.   -  person BobbyShaftoe    schedule 11.09.2010
comment
@BobbyShaftoe - То, что программистам нужны администраторы баз данных, связано с тем, откуда пришли программисты. Программисты раньше не были архитекторами программного обеспечения или логиками. Это были машинные кодеры и системные администраторы, а также администраторы баз данных; Компьютерщики, если хотите. С появлением языков программирования высокого уровня (например, Python, Ruby и др.) появились новые программисты; тех, кто не заботился ни о двоичных файлах, ни о материнских платах, ни вообще о компьютерных науках. Я сам интересуюсь этим, не имея опыта работы с компьютерными науками, но у меня просто не хватает времени в день, чтобы изучить все это.   -  person orokusaki    schedule 12.09.2010


Ответы (6)


Я лично не думаю, что то, что вы описали, является такой большой базой данных. Сервер (20 гигов оперативки? ;)) звучит прилично. Это больше касается использования и дизайна. Если база данных проиндексирована и хорошо спроектирована, она может значительно увеличиться на существующем оборудовании.

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

person Jemes    schedule 10.09.2010
comment
Я не думаю, что это что-то близкое к большому. С точки зрения эффективности, определитесь с мерой или мерами и сделайте некоторые размеры, это может быть весело. Журнал может нуждаться в сокращении, если он работает уже 5 лет! - person MikeAinOz; 11.09.2010

Причина шардинга и отдельных серверов БД заключается в том, что в какой-то момент будет дешевле использовать несколько более дешевых машин, чем одну дорогую. Цена на оборудование не зависит от производительности линейно, и как только вы достигнете определенной точки, будет намного дешевле получить в два раза больше машин, чем получить машину, которая вдвое быстрее.

person Davy8    schedule 10.09.2010
comment
Очень интересное соображение - можете привести хотя бы очень грубый пример соотношения цена-качество? Даже устаревший был бы хорош, мне просто интересно, как он выглядит на практике. - person Zoltán Schmidt; 13.02.2016

У вас не должно возникнуть проблем с SQL-сервером, Oracle или любой современной реляционной или нереляционной базой данных. Я администрировал базы данных с сотнями миллионов записей и терабайтами данных.

person Dustin Laine    schedule 10.09.2010

Обычно вы распределяете компоненты по разным серверам, чтобы упростить управление временем безотказной работы, отказоустойчивостью и производительностью.

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

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

Также важно подумать о времени восстановления серверов и планах восстановления.
Что произойдет, если ваша машина выйдет из строя, сможете ли вы заменить ее в оговоренное время? Можно ли за это время восстановить из резервных копий?

SQL Server или другие базы данных корпоративного класса не должны иметь проблем с базами данных 10 или 100 ГБ, если они не слишком плохо спроектированы. (У нас есть несколько машин с такой мощностью/использованием, которые вообще не борются.).

person Bravax    schedule 10.09.2010

По-моему, это ничего. Наличие десятков миллионов строк в нескольких таблицах с размером базы данных, превышающим 10 ГБ, не вызвало проблем для MS SQL Server. Конечно, это не слишком быстро с таким количеством данных, но в остальном работает нормально.

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

person Carlos    schedule 10.09.2010

Базы данных чрезвычайно эффективны при хранении и извлечении реляционных данных (то есть данных, которые структурированы и имеют ссылки на другие данные) — для этого они и предназначены. Честно говоря, 99% людей, болтающих о хранилищах ключ-значение, Кассандре и прочем, понятия не имеют, что они делают. Сервер базы данных отлично подходит для хранения больших объемов данных, особенно если вы готовы немного поработать над его правильной настройкой.

Тем не менее, есть варианты использования Cassandra et. др. - если у вас в основном неструктурированные данные типа "ключ-значение" или вам не нужна согласованность или вы хотите сегментировать для избыточности, возможно, стоит изучить.

Если вы не являетесь чрезвычайно популярным веб-сайтом, вы, вероятно, вполне сможете обойтись приличным сервером базы данных — не переключайтесь, пока не определите, почему вам нужно переключиться. Переключение — это нормально, просто убедитесь, что вы переключаетесь, потому что это лучше отвечает вашим потребностям, а не потому что это «крутая вещь в веб-масштабе».

person Steven Schlansker    schedule 10.09.2010
comment
Когда вы ответили на этот вопрос, я хотел спросить вас: каковы некоторые из элементарных очевидных шагов по настройке БД (помимо настройки ваших запросов и избегания посторонних запросов, что, пожалуй, и все, что я сейчас умею делать)? - person orokusaki; 22.05.2011