Методы использования длинного ключа varchar в качестве ключа поиска - PullRequest
2 голосов
/ 07 июля 2010

Я встраиваю механизм комментирования в приложение, которое позволяет программисту / автору плагина просто реализовывать потоки комментариев.

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

Допустим, программист хотел добавить комментарии к изображениюЗагрузить плагин он называет "мои изображения".Затем в коде он может вызвать что-то вроде:

insertCommentThread('myimages:340');

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

insertCommentThread('wiki-entry-page-name-it-could-be-long');

Итак, разработчикможете называть темы любым именем, которое им нравится.

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

Так что мой вопросis ...

Есть ли способ сохранить строковый ключ каким-либо закодированным способом, чтобы он стал меньше и быстрее для поиска?

(я мог бы хэшироватьстрок, но тогда читаемость базы данных теряется ...)

кстати.Я использую MySQL

Ответы [ 4 ]

1 голос
/ 07 июля 2010

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

1 голос
/ 07 июля 2010

Зачем вам нужно сделать строку поиска первичным ключом?

Я бы использовал числовой первичный ключ для скорости и отдельное уникальное поле поиска для длинной строки.

Скорее всего, вам все равно придется выполнить повторную проверку, прежде чем вставлять запись, и найти замену, если проверка не удалась. Я не уверен, насколько ограничение mySQL UNIQUE поможет вам здесь.

0 голосов
/ 07 июля 2010

Я бы предложил построить функции с 2 параметрами. Один для типа комментария и один для уникального комментария itselfe:

insertCommentThread('images', '340');
insertCommentThread('wiki', 'entry-page-name-it-could-be-long');

БД, которую я бы тогда спроектировал так:

ID (int) - GROUP (varchar) - NAME (varchar)
PriKey: ID
Unique: (Group + Name)

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

0 голосов
/ 07 июля 2010

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

...