Вопрос

Мне нужно хранить длинные строки в базе данных. строка может состоять из 5 или 6 предложений. Как вы думаете, это хорошая стратегия дизайна. или я должен сохранить идентификатор для этой строки, а затем создать связь с другой таблицей, которая содержит местоположение файла, хранящего строку. Не могли бы вы дать преимущества и недостатки обоих.

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

Это было полезно?

Решение

Должно быть хорошо хранить строку в базе данных. Если вместо этого вы храните указатель файла, это означает, что вам нужно выполнять File I / O каждый раз, когда вы хотите прочитать строку. Несколько предложений не очень длинны, и вы всегда можете использовать поле данных длинного текста, если вам нужно. Очевидно, ваша база данных будет немного больше, потому что у вас есть текст, но это нормально. Это, безусловно, лучшая альтернатива, чем хранить файлы.

Другие советы

Строки, которые вы упоминаете, совсем не длинные.

Когда вы ссылались на " long " Строки, я думал о 32 КБ и выше - некоторые предложения < 1 КБ - это ничто сегодня.

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

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

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

Пять или шесть предложений - ничто для современной СУБД! Сохраните текст непосредственно в базе данных.

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

Ответ действительно зависит от объема строк, которые вы намереваетесь хранить, и от того, какую БД вы собираетесь использовать для хранения. Если вы не храните много строк, возможно, вы захотите сохранить их в XML-файле или файле ресурсов и загрузить их в свое приложение заранее. Если у вас много строковых данных, вам, вероятно, будет лучше читать по памяти, когда и когда вам это нужно, вместо того, чтобы использовать возможность чтения строки в память, которую вы в конечном итоге не используете.

Сама база данных не имеет реальной проблемы с хранением длинных строк. Существуют некоторые ограничения (например, ограничение размера записи 8k на SQL Server), но даже в этом случае вы можете хранить текст произвольной длины в базе данных, поскольку все необходимые поддерживают типы данных BLOB / TEXT практически без верхнего предела.

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

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

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

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

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

Единственный другой вариант - поместить строки в другую таблицу (поместить туда реальные строки) ... размещение их в отдельных файлах снизит производительность.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top