2009-10-07 1 views
3

Таблица в нашей схеме уже содержит 100 столбцов. Нам нужно добавить еще 600 столбцов, если мы будем следовать горизонтальному методу хранения данных. Если мы будем использовать вертикальное хранилище данных, что означает создание новой таблицы и создание ссылочной целостности с таблицей, содержащей 100 столбцов, будет проблема с присоединением к таблице, поскольку таблица, содержащая 100 столбцов, имеет 53 миллиона записей, а новая созданная таблица будет иметь гораздо больше чем это. Что лучше подходит в этом случае.много столбцов в таблице

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

а> Время, затраченное на обновление 1000 записей >> 2.10 сек б> Время, необходимых для обновления 10000 записей >> 5.57 Секунды с> Времени, необходимой для обновления записей >> 1000000 5.42 минут d> Время, затраченное на обновление 53 миллионов записей >> 4. 5 часов (израсходовано табличное пространство, и нам нужно было расширить табличное пространство)

Может ли кто-нибудь предложить более быстрый способ обновления?

+5

Что вы храпите здесь? –

ответ

0

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

Может быть, это уместно записать данные в XML-документ, а затем сохранить документ в БД ...

1

Edit: Это на самом деле очень интересный вопрос, теперь мне очень интересно об этом. Я предлагаю сделать некоторые тесты реального мира, одну большую таблицу и множество таблиц, с максимально возможной информацией. Это может стоить дополнительных усилий! Помните, что даже реляционные БД могут зависать, если они разработаны плохо, и есть миллионы записей (я испытал это, когда был заключен контракт с андеррайтинговой компанией, нелегко исправить после факта). Таким образом, ваш дизайн с одним столом может также работать - доказательство в тестировании.

53 миллиона записей? Надеюсь, вы используете настоящий реляционный движок базы данных, такой как MySQL/SQL, который предназначен для обработки больших таблиц.

600+ Столбцы в одном столе звучат, как перебор, для меня. Я предполагаю, что это не единичная структура записей, поэтому вы выбираете подход «все в одном ряду»? Даже в этом случае лучше было бы иметь отдельные таблицы, в зависимости от ваших данных.

+0

SQL Server и oracle могут обрабатывать не менее 1000 столбцов в таблице. – skaffman

+0

О, хорошо, тогда очистка устаревших ограничений от ума. – Joey

+0

1000 столбцов за стол, но все же ограничение по имени на 30 символов ..... это делает ребенка jesus cry – skaffman

2

Вопросы вы должны спросить себя:

  • ли большинство полей в моем широком ряду имеют по умолчанию или пустые значения? Если это имеет место, вертикальная схема может быть более подходящей.
  • Когда вы запрашиваете, вам обычно нужно , чтобы получить все поля из строки , или же поля естественно классифицируют в группы? Если это так, то горизонтальная схема , скорее всего, прекрасна, но вы, вероятно, захотите нарезать основную таблицу на подгруппы, каждая с - естественная группа полей, и все в a 1: 1 связь с главная таблица.
+0

Может ли использование абстрактных типов данных решить мою проблему здесь. Скажем, уменьшив 600 столбцов до всего лишь 20 столбцов – Nishant

+0

@Nishant: Дайте нам несколько данных, и мы можем сделать более четкие рекомендации. – dnagirl

0

Вы могли бы рассмотреть вопрос об использовании базы данных столбца ориентированных, посмотри на HBase (http://hadoop.apache.org/hbase/), это распределенный, колонок-ориентированный магазин по образцу большого стола Google.

+0

Я никогда не слышал термина базы данных, ориентированной на столбцы. Это в основном каждый файл/объект имеет большое количество переменных атрибутов, вроде CouchDB? –

1

Без обид никого ... Интересно, действительно ли ваши данные, хранящиеся в 100 столбцах раз 53 миллиона записей, являются normalized?

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

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

+0

Thnks для ваших комментариев stefan. Я знаю, что дизайн таблицы после добавления 600 столбцов дает основную концепцию нормализации. В нашем случае характер данных таков, что если мы займемся созданием разных таблиц и присоединимся к нему, это создаст для нас большой показатель производительности. – Nishant

+0

Вы * попробовали *? Я не верю, что ваша огромная таблица работает лучше, чем нормализованная база данных. СУБД * разработан * для управления нормализованными данными и объединениями. Там есть индексы и другие способы сделать это быстро. Я также иногда денормализую данные или добавляю избыточность для производительности. Это всегда компромисс, и это болит где-то в другом месте, и я стараюсь избегать этого. Но в этом случае я думаю, что это слишком экстремально, и я не могу поверить, что он работает хорошо. Но, возможно, я ошибаюсь, я никогда не уставал создавать такой огромный стол. –