2017-01-14 17 views
0

Я знаю, что этот вопрос задан довольно много раз, но у меня нет удовлетворительного ответа.Почему реляционная база данных не может масштабироваться горизонтально

Я прочитал много блогов, и большинство из них говорит, что СУРБД нельзя масштабировать по горизонтали. Единственный способ справиться с этим - покупка больших машин.

Затем я читаю, почему их нельзя масштабировать горизонтально. Люди говорят, потому что они обеспечивают надежные, зрелые услуги в соответствии с свойствами ACID. Мой аргумент заключается в том, что мы не можем отказаться от RDBMS для предоставления свойств ACID для определенных таблиц. Это единственная причина, по которой ее нельзя масштабировать горизонтально, и мы должны рассматривать базы данных NoSQL.

Второй аргумент, который заключается в том, что базы данных NoSQL хранят данные как единое целое, тогда как RDBMS хранит данные по нескольким таблицам. Таким образом, одна часть данных может находиться в одной системе, а другая часть данных, которую она ссылается, может быть в другой системе. Следовательно, масштабирование РСУБД распределено затруднительно. Мой вопрос к ним заключается в том, почему мы не можем хранить все связанные данные в одной таблице, а рассеивать их по нескольким таблицам, если этого требует ситуация. Если NoSQL может хранить данные как единое целое в одной коллекции, почему RDBMS не может хранить данные как единое целое в одной таблице. (Например, почему заказ должен быть разбит на таблицу заказов, таблицу клиентов и таблицу платежей. Почему они не могут быть сгруппированы в одну таблицу, как мог бы хранить NoSQL)

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

Вкратце, можем ли мы заставить РСУБД вести себя как база данных NoSQL и сделать ее масштабируемой по горизонтали?

+0

Yup stick все в blob - удачи, получив его снова. –

+0

Teradata - это коммерческая распределенная РСУБД, работающая с начала 80-х годов. Если он существует, возможно, это возможно. –

+0

Трудно ответить, не повторяя блоги, которые вы читаете. ACID заставляет вас проверять многое (вы должны попытаться сделать несколько примеров, это может сделать это яснее!) И rdbms сильно зависят от него, что усложняет работу, если данные неструктурированы и распространены повсюду (но не невозможно, кластеры и, например, json существуют). Если вы удалите (некоторые из) эти проверки, вы можете, например, хранить все, где вы хотите, даже иметь автономные узлы. Если результаты Google или списки facebook бывают быстрыми, но не на 100% точными, вы можете жить с ним. Если ваш банк будет думать так же, вы можете жаловаться. – Solarflare

ответ

2

Во-первых - что вы подразумеваете под «масштабированием по горизонтали»?

Для меня - масштабирование по горизонтали - это то, что мы делаем в базах данных MPP (Massive Parallel Processing) - таких как Vertica, Teradata, DB2 Parallel Edition, NonStop SQL и т. Д .: У вас очень большая таблица, которую вы равномерно распределяете по всем все узлы вашего кластера MPP, основанные, как правило, на хэш-значение первичного ключа или что-то подобное. Это то, что делает Hadoop и вся другая архитектура Map-Reduce, хотя и часто менее эффективны, по крайней мере, на данный момент).

(только для уточнения): Если у вас 10 узлов в вашем кластере, ваши большие таблицы распределены, чтобы иметь одну десятую их данных на каждом узле. Теперь масштабирование будет состоять в том, чтобы добавить, например, 10 узлов и повторно распределить данные, чтобы каждая таблица имела 1/20 своих данных на каждом узле. И базы данных MPP линейно масштабируются; это означает, что путем удвоения количества узлов с тем же объемом данных запросы будут выполняться в два раза быстрее.

Вы, кажется, имеете в виду нечто иное - и мне любопытно, что вы могли бы означать.

Как RDBMS, имеющих разделить все на несколько таблиц:

«R» в РСУБД означает «реляционная». Прежде чем вводить обсуждение всего этого, вы должны прочитать базовый учебник по реляционной алгебре . Отношение - это просто набор объектов, которые могут быть описаны с одинаковыми атрибутами. При этом все объекты имеют одинаковые атрибуты/colums/fields. Как только это правило нарушается, оно больше не является отношением/таблицей.

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

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

Ваш вопрос здесь так же, как спросить, почему у велосипеда два колеса.

Или я что-то упускаю?

Marco the Sane

+0

Привет @marcothesane. Ваш ответ предполагает, что реляционные данные могут масштабироваться горизонтально. По горизонтали я имею в виду добавление большего количества узлов. Но большинство документов говорят, что RDBMS предназначены для работы на одном узле. Вы можете прочитать это здесь https://www.couchbase.com/nosql-resources/why-nosql. Это официальные документы couchdb. Я хочу знать, почему эти базы данных NoSQL утверждают, что RDMBS нельзя масштабировать до нескольких узлов. – Aniket

+0

«РСУБД» - достаточно широкий срок, чтобы избежать иска –

+0

Hi Anliket. Ну, кажется странным, какую вводящую в заблуждение информацию вы можете получить там. Базы данных, такие как Oracle, стандарт DB2 UDB, стандарт SQL Server, действительно являются базами данных, запущенными на одной (обычно большой) машине. Но Oracle Exadata, например, работает на многих узлах. И такие базы данных, как Teradata, DB2 Parallel Edition, SQL Server Parallel DW и, прежде всего, моя любимая Vertica, работают на MPP (Massive Parallel Processing), shared-nothing, clusters. Самый маленький кластер обычно имеет 3 узла, и они масштабируются линейно, если вы добавляете узлы. Просто Google на MPP и посмотрите, что вы найдете. – marcothesane