Текстовое поле sql против плоского файла против хранилища документов nosql

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

Альтернатива, которая, кажется, набирает популярность, - это полностью основанное на документах решение NoSQL (например, CouchDB, MongoDB и т. Д.). Мне интересно, каковы компромиссы (масштабируемость / надежность / безопасность / производительность / простота внедрения / простота обслуживания / стоимость)) между простым использованием текстового поля SQL, указателем на плоские файлы или полным переосмыслением всей системы в контексте хранилища документов NoSQL?

1 ответ

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

Во-первых, давайте обсудим, почему плохая идея сохранять большие данные в реляционной базе данных:'

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

Ваш выбор "где-то еще" широк, но включает в себя:

  • программное обеспечение для хранения больших данных, такое как Cassandra, MongoDB и т. д.
  • Базы данных NoSQL, такие как Lucene
  • Файловая система

Делайте то, что проще всего - это работает - все они действительны, пока вы выполняете расчеты ваших требований для:

  • пиковая производительность записи
  • пиковая производительность чтения
  • объем длительного хранения

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

Другие вопросы по тегам