2011-09-20 3 views
1

Каков наилучший способ вставить шрифт в базу данных SQL Server, зная, что этот шрифт можно получить из разных сред (Windows/Linux) и языков (Java/PHP/Python/C#)?Лучший способ сохранить шрифт в базе данных SQL Server

У меня есть случай, когда я должен вставить шрифт из приложения C# Winforms и получить этот шрифт из приложения Java, и в настоящее время я вставив Font.Name, Font.Style и Font.Size и из Java Я извлекая шрифт, используя метод Font.Decode(); ,

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

например: Font Name, Font Size и Font Style + Font File, потому что иногда этот шрифт не установлен или имеет другое имя на другой системе (шрифт очень важно в моем случае).

+2

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

+0

@marc_s im уверен в файле Font, и это не мое беспокойство, моя забота - я должен или НЕ должен, и я уточнил, почему! И мне нужна идея или если у кого-то есть уже сделанное решение, как передать Java и другие, которые Шрифт использовать. – Burimi

+0

@marc_s: Я считаю, что графическая библиотека Java может загружать файл шрифта из файловой системы (или, скорее, поток байтов в этой ситуации), а затем использовать его в приложении через 'Font java.awt.Font.createFont (int fontFormat, InputStream in); 'или' Font java.awt.Font.createFont (int fontFormat, File fontFile); 'Я не уверен в других языках. –

ответ

2

Существует действительно хорошая статья от Microsoft Research под названием To Blob or Not To Blob.

Их вывод после большого количества тестов производительности и анализа заключается в следующем:

  • если ваши фотографии или документ, как правило, ниже 256К в размере, сохраняя их в базе данных столбца VARBINARY является более эффективным

  • , если ваши изображения или документы обычно имеют размер более 1 МБ, а их хранение в файловой системе более эффективно (и с атрибутом FILESTREAM от SQL Server 2008 они все еще находятся под транзакционным управлением и частью базы данных)

  • между этими двумя, это немного жеребьевкой в ​​зависимости от вашего использования

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

Для файловых групп ознакомьтесь с Files and Filegroup Architecture для вступления. В принципе, вы либо создадите свою базу данных с отдельной файловой группой для больших структур данных с самого начала, либо добавите дополнительную файловую группу позже. Назовем его «LARGE_DATA».

Теперь, когда у вас есть новая таблица для создания которых необходимо для хранения VARCHAR (MAX) или VARBINARY (MAX) колонки, вы можете указать эту группу файлов для больших объемов данных:

CREATE TABLE dbo.YourTable 
    (....... define the fields here ......) 
    ON Data     -- the basic "Data" filegroup for the regular data 
    TEXTIMAGE_ON LARGE_DATA -- the filegroup for large chunks of data 

Отъезд MSDN вводите в файловые группы и играйте с ним!

+0

Хорошая вещь +1, я проанализирую ее. – Burimi

Смежные вопросы