Очень длинные строки в качестве первичных ключей в базе данных для кеширования - PullRequest
0 голосов
/ 01 апреля 2010

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

Идея состоит в том, что Пользователь 1 вводит несколько слов (произвольное количество слов, практически ограниченных, конечно), например:

A B C D E

В базе данных нет такой строки, поэтому я подумал:

  1. Сохраните эту строку как первичный ключ в базе данных MySQL (это может быть около 50-100 КБ текста, но обычно, вероятно, менее 200 слов)

  2. Создайте файл PDF и создайте ссылку на него в базе данных

  3. Когда следующий пользователь запрашивает A B C D E, тогда я могу просто подать файл вместо того, чтобы воссоздавать его каждый раз. (простой кеш)

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

Мои вопросы:

  1. У кого-нибудь есть альтернативные идеи для моего подхода

  2. Какой будет производительность базы данных?

  3. Есть ли лучший способ создать схему, чем использование входной строки в качестве первичного ключа?

Ответы [ 3 ]

2 голосов
/ 01 апреля 2010

Как насчет использования автоинкрементного целочисленного ключа, и рядом с ним вы можете сохранить имя файла?

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

Я не могу ответить на вопросы о производительности, но это гораздо более распространенное явление.

1 голос
/ 01 апреля 2010

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

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

0 голосов
/ 01 апреля 2010

Если вы используете c #, вы можете использовать string.GetHashCode (), чтобы получить целое число, которое (почти наверняка) будет уникальным и предоставит первичный ключ на основе целых чисел.

Вы можете удалить пробелы и т. Д., Так как это приведет к созданию другого хеш-кода.

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