Подтвердить что ты не робот

Разделение базы данных - горизонтальное и вертикальное - различие между нормализацией и разбиением строк?

Я пытаюсь понять различные концепции разбиения базы данных, и именно это я понял:

Горизонтальное разделение/оглавление. Разделение таблицы на другую таблицу, которая будет содержать подмножество строк, которые были в исходной таблице (пример, который я видел много, если разбивать таблицу Users на Континент, как подкатегория для Северной Америки, другая для Европы и т.д.). Каждый раздел находится в другом физическом местоположении (понимаем "машина" ). Как я понял, горизонтальное разделение и оглавление - это то же самое (?).

Вертикальное разделение. Из того, что я понял (http://technet.microsoft.com/en-us/library/ms178148%28v=sql.105%29.aspx), существует 2 вида вертикального разбиения:

  • Нормализация (которая заключается в удалении избыточности из базы данных путем разделения таблиц и связывания их с внешним ключом).

  • Разделение строк, вот что я не понимаю, в чем разница между нормализацией и разбиением строк? В чем эти два метода отличаются друг от друга?

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

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

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

4b9b3361

Ответ 1

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

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

Так как вы просите простую демонстрацию, предположим, что у вас есть таблица вроде этого:

create table data (
    id integer primary key, 
    status char(1) not null, 
    data1 varchar2(10) not null, 
    data2 varchar2(10) not null);

Один способ разделения data по вертикали: Разделить его следующим образом:

create table data_main (
    id integer primary key,
    status char(1) not null,
    data1 varchar2(10) not null );

create table data_rarely_used (
    id integer primary key,
    data2 varchar2(10) not null,
    foreign key (id) references data_main (id) );

Этот вид разбиения может применяться, например, когда вам редко требуется столбец данных2 в ваших запросах. Раздел data_main займет меньше места, поэтому полное сканирование таблицы будет быстрее, и более вероятно, что он вписывается в кеш-страница СУБД. Недостаток: когда вам нужно запросить все столбцы data, вам обязательно придется присоединиться к таблицам, что будет более дорогостоящим, если запросить исходную таблицу.

Обратите внимание, что вы разделяете столбцы так же, как и при нормализации таблиц. Однако в этом случае data уже можно было бы нормализовать до 3NF (и даже BCNF и 4NF), но вы решили еще разделить его по причине физической оптимизации.

Один из способов разделения data по горизонтали, используя синтаксис Oracle:

create table data (
    id integer primary key, 
    status char(1), 
    data1 varchar2(10), 
    data2 varchar2(10) )
    partition by list (status) ( 
       partition active_data values ( 'A' ),
       partition other_data values(default) 
    );

Это сообщит СУБД внутренне хранить таблицу data в двух сегментах (например, две таблицы), в зависимости от значения столбца status. Этот способ разбиения на разделы data может быть применен, например, когда вы обычно запрашиваете только строки одного раздела, например, строки состояния "A" (пусть их называют активными строками). Как и раньше, полное сканирование будет быстрее (особенно если имеется только несколько активных строк), активные строки (и другие строки соответственно) хранятся смежно (они не будут разбросаны по страницам, которые они разделяют с строками другого статус статуса, и более вероятно, что активные строки будут в кэше страниц.

Ответ 2

Горизонтальное разделение в базе данных

Сохранение всех полей EG: Таблица Employees имеет

  • идентификатор,
  • имя,
  • Географическое расположение,
  • электронная почта,
  • обозначение,
  • телефон

EG: 1. Сохранять все поля и распространять записи на нескольких машинах .say id = 1-100000 или 100000-200000 записей на одном компьютере каждый и распределять по нескольким машинам.

EG: 2. Сохранение отдельных баз данных для регионов EG: Азиатско-Тихоокеанский регион, Северная Америка

Ключ: выбор набора строк на основе критериев

Вертикальное разделение в базе данных

Он похож на нормализацию, когда одна и та же таблица делится на несколько таблиц и используется с объединениями, если требуется.

EG: id, name, designation помещается в одну таблицу и
phone, email, которые не могут быть часто доступны, помещаются в другой.

Ключ: выбор набора столбцов на основе критериев.

  • Горизонтальное/вертикальное масштабирование отличается от разбиения

Горизонтальное масштабирование:

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

Вертикальное масштабирование:

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

Самир Сукумаран