Как я могу рассчитать стоимость хранения проекта базы данных?

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

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

Какие ресурсы помогут вам определить стоимость (или необходимое пространство) для хранения базы данных?

Обратите внимание. Мой вопрос не столько связан с выбором базы данных, сколько с тем, как правильно использовать дизайн каждой базы данных для наиболее эффективного. Такие базы данных, как PostgreSQL, MySQL, CouchDB, имеют разные целевые варианты использования и множество способов решения одной и той же проблемы. Таким образом, знание стоимости хранения каждого решения поможет выбрать лучшее решение для схемы.


person Xeoncross    schedule 23.02.2012    source источник
comment
Почему вы хотите вычислить это при разработке схемы... это звучит как неразумная попытка, поскольку сама по себе схема совсем не будет определять размер базы данных. Также учитывая, что стоимость места для хранения будет наименее важным фактором для общей стоимости, например. выбор необходимой базы данных.   -  person Manfred Moser    schedule 24.02.2012
comment
@ManfredMoser, схема базы данных - это основа дизайна данных вашего приложения. То, как он построен, показывает, какие у вас планы по хранению данных.   -  person Xeoncross    schedule 24.02.2012
comment
Да... но МНОЖЕСТВО других факторов будет значительно влиять на хранилище, так что любая оценка только по схеме без дополнительных требований, таких как производительность (кэширование, индексы...) или запросы (хранилище данных поверх OLTP), становится совершенно бессмысленной... имхо зря тратишь время.   -  person Manfred Moser    schedule 24.02.2012
comment
@ManfredMoser, да, я не сомневаюсь, что кэширование необходимо. Однако давайте сосредоточимся на чем-то одном. Сначала нам нужно знать, где мы можем получить информацию для взвешивания наших вариантов, затем мы можем составить планы относительно дизайна, и, наконец, мы можем добавить CDN и кэширование в нашу проектную документацию, чтобы убедиться, что все это работает.   -  person Xeoncross    schedule 24.02.2012
comment
Как только вы учтете все эти вещи, а также подумаете о затратах на обучение для различных технологий, техническое обслуживание и т. д., разница в стоимости хранения станет незначительной.   -  person Manfred Moser    schedule 24.02.2012
comment
давайте продолжим это обсуждение в чате   -  person Xeoncross    schedule 24.02.2012
comment
Достаточно справедливо .. так что там. Я думаю, что напрасно думать о стоимости хранения на той ранней стадии проекта, в которой вы, кажется, находитесь (извините, я пропустил чат ..)   -  person Manfred Moser    schedule 24.02.2012
comment
Вы когда-нибудь слушали nuvolabase.com? Это распределенная база данных в облаке (orientdb). Я думаю, что он идеально подходит для небольших/средних/средне-крупных проектов с очень большими записями.   -  person dAm2K    schedule 08.03.2012


Ответы (2)


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

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

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

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

Все эти вещи

  • добавление и удаление индексов с течением времени,
  • добавление и удаление ограничений с течением времени,
  • добавление и удаление столбцов с течением времени,
  • добавление и удаление таблиц с течением времени,

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

Вы можете довольно точно рассчитать пространство, необходимое для строки и страницы. (Попробуйте Google для «Макет строки YourDBMSname» и «Макет страницы YourDBMSname».) Но когда вы пытаетесь умножить на количество требуемых строк, вы должны оценить количество строк. Это ставит вас на большой конец того, что Стив МакКоннелл называет "конусом неопределенности".

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

У последней компании из списка Fortune 100, в которой я работал, была рабочая база данных, которая работала с 1970-х годов. Сотни приложений, написанных более чем на 25 языках программирования в течение 40 лет, ежедневно попадают в эту цель. (Я думаю, что изначально он был построен на IMS от IBM; сегодня он работает на Oracle.)

Еще несколько лет назад никто не предполагал, что их база данных будет использоваться для перевода технических чертежей и спецификаций на китайский язык, а также для изготовления таможенных документов, необходимых для вывоза готовой продукции из Китая. Внедрение этих новых функций требовало хранения дополнительных данных о каждой детали и о каждом проектном документе в их оперативной инвентаризации. В начале этого проекта наши оценки были довольно далекими. Это большой конец конуса. (Мы оценили несколько вещей, но не использование диска. От нас требовалось добиться успеха, поэтому, какой бы дизайн я ни придумал, кто-то должен был предоставить необходимое дисковое пространство.) Но когда мы запускались, мы знали точное значение для каждого оценка, потому что мы уже сделали работу. (Это узкий конец конуса.)

Итак, как снизить риск догадок в среде проектирования и развертывания базы данных? Извлеките урок из 1972 года.

Создайте прототип и измерьте его.

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

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

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

Фред Брукс-младший, Мифический человеко-месяц, стр. 116.

person Mike Sherrill 'Cat Recall'    schedule 03.03.2012
comment
Я полностью согласен с тем, что затраты на хранение данных уступают место гибкости и мощности. Однако мой вопрос не о выборе одной базы данных над другой или даже о выборе, основанном исключительно на экономии места. Я выбираю базу данных исходя из требований. Мой вопрос касается затрат на хранение при выборе одного маршрута в базе данных над другим. Например, при расчете стоимости одного подхода или другого альтернативного (и в равной степени обоснованного) подхода, где пространство также может быть решающим фактором, способным изменить окончательное решение в одну сторону. - person Xeoncross; 04.03.2012
comment
@Xeoncross: я думаю, вы неправильно прочитали мой ответ. Я ничего не говорил ничего о выборе СУБД или технологии. Я сказал, по сути, что вы не можете выразить требование в терминах дискового пространства для СУБД SQL, используя что-либо более точное, чем догадки. (Это особенно верно, если вы используете гибкие методы.) Таким образом, вы не можете выразить стоимость дискового пространства для СУБД SQL, используя что-то более точное, чем догадки. (Если только Java-программист не спроектирует базу данных, в этом случае все ограничения, половина индексов и половина данных, вероятно, окажутся в коде приложения.) - person Mike Sherrill 'Cat Recall'; 04.03.2012

Вот статья AskTom, которая мне показалась полезной. Однако это специфично для Oracle.

http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:266215435203

person Jim    schedule 03.03.2012