Есть ли разница в производительности между мелкой / широкой базой данных и глубокой / тощей? - PullRequest
0 голосов
/ 02 января 2019

Скажем, у вас есть база данных, в которой вы хотите хранить данные биржевого графика, состоящие из серии "свечей". «Свечи» имеют пять свойств - Open, High, Low, Close и Timestamp.

В настоящее время я храню их как строку, ограниченную |, и у меня есть одна таблица Stocks, состоящая из двух столбцов:

PK (AAPL)

TickData (big string)

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

Альтернативой является таблица Stocks с отношением один ко многим с другим столом Ticks или Candles, но этот стол станет очень, очень глубоким и худым.

Стоит ли ожидать какого-либо существенного влияния (или улучшения) на производительность, используя что-то вроде зрелой схемы ORM +, чтобы сделать это "правильным образом" - глубоким, тонким и денормализованным?

1 Ответ

0 голосов
/ 02 января 2019

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

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

Данные полезны только для приложения, которое знает, как их анализировать. Это делает данные гораздо менее полезными, чем могло бы быть.

Этот подход пропускает кучу вещей, которые делают базы данных:

  • Вы не можете проверить данные.
  • Вы храните числовые данные и данные даты и времени в виде строк.
  • Механизм SQL не может оптимизировать запрос, за исключением индекса для биржевого кода (которого может быть достаточно).
  • Он менее масштабируемый, чем вы можете себе представить, - со временем строки просто увеличиваются.
  • Вставка новых данных стоит дорого, потому что вы должны копировать увеличивающиеся большие строки.
  • Обновление / удаление данных дорого и сложно.
  • Вы не можете получить только часть данных.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...