2010-11-05 3 views
3

Эй. Я собираюсь создать базу данных, которая может стать действительно огромной.Решение распределенной базы данных?

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

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

Имеет ли смысл распространять базу данных по нескольким компьютерам в моей интрасети, чтобы она могла масштабироваться с помощью CPU/Ram и т. Д., И если это так для этого или для решения баз данных для этого?

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

ответ

1

Масштабируемость базы данных - ОЧЕНЬ сложная проблема; есть много вопросов, которые входят во весь процесс.

Во-первых, рассмотрите наихудшие фрукты; есть ли у вас отдельные таблицы (или столбцы), которые будут содержать основную часть ваших данных? Столбцы, которые будут содержать BLOB, которые составляют> 4 МБ каждый? Они могут быть извлечены из базы данных и сохранены в системе хранения с плоскими файлами и просто указаны в базе данных; прямо там, что может занять много громоздких решений вплоть до управляемого уровня.

Если нет, у вас есть сильно разные шаблоны использования для разных подгрупп таблиц? Если это так, есть возможность для сегментирования вашей базы данных в разные функциональные базы данных, которые могут быть разделены на разные серверы. Хорошим примером этого является чтение данных, в основном данных, например, на веб-серверах, которые генерируются редко (думаю, пользовательские данные домашней страницы), но часто читайте; этот тип данных может быть разделен на базу данных (или, опять же, файл с ссылками), который отделен от остальных пользовательских данных).

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

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

+0

, чтобы дать вам немного больше информации о реальной проблеме, мы собираемся извлечь большие объемы данных из множества источников и проанализировать множество статистических данных из каждой записи. каждый день база данных будет обрабатывать 100 000 новых записей, каждая из которых содержит 100 статистических данных. фактический размер файла для каждой записи - это проблема <1 КБ, и после того, как ее синтаксический анализ не нужно использовать. мы будем запускать много и много разных запросов в реальном времени на каждом растущем наборе данных и в конечном итоге открывать платформу для других людей, чтобы сделать то же самое. –

+1

@nextgenneo: Да, у вас проблемы с этим. Я по-прежнему рекомендую делать все возможное, чтобы разумно разбить вашу базу данных; есть ли какой-то временный горизонт, через который вы не будете пересекать, или тому подобное? Потому что, если у вас действительно есть большой, неразрешимый реляционный набор данных, вам может потребоваться завершить (очень дорогое) коммерческое решение. Я не поклонник Oracle (по меньшей мере), но они понимают эпическое масштабирование лучше, чем кто-либо. –

1

Хорошо, сначала я должен указать вам на here. Я не Думаю, что MySQL будет работать так, как вы хотите. У меня плохое чувство, что, когда я говорю, что вам нужно заглянуть в установку Oracle, вы скажете: «У нас нет денег для этого». Но, когда я говорю, получите последний/самый большой SQL-сервер, вы скажете: «У нас нет оборудования, которое потребуется для его реализации». Я боюсь, что терабайты просто плоские, чтобы подавить вашу установку MySQL.

+1

Учитывая его разъяснение в комментарии к моему ответу выше, я чувствую, что вы правы; и ваш вопрос об Oracle в точности прав. Oracle отлично зарекомендовал себя как кассовый аппарат, и как только вы с ними, нет возврата; что они действительно единственная игра в городе, когда дело доходит до типа масштабируемости, в которой они специализируются ... –

0

Создается новое поколение баз данных NewSQL для решения именно проблемы распределения ресурсов по нескольким серверам.База данных Clustrix (которая была построена с нуля, чтобы быть заменой MySQL) является одним из примеров, который обеспечивает почти линейный масштаб - по мере того, как у вас заканчивается процессор/память, вы можете просто добавлять узлы.

0

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

Горизонтальная масштабируемость; возможность масштабирования базы данных по горизонтали (aka scale-out) является хорошей методикой для решения проблемы очень больших таблиц и баз данных.