Как оптимально хранить записи с множеством различных характеристик?

Необходимо регистрировать проходящие вещи. Вещи, как правило, разные, причем какие вещи придут завтра - неизвестно. Разработали определенный набор характеристик, которыми можно описать любую проходящую вещь. В основном - это набор целочисленных значений и несколько строк на запас:
`type` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item type',
`city` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item base geolocation',
`post` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item time post',
`stop` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item time expiration',
`flid` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item flag id',
`hgsz` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item huge size',
`phct` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item photos count',
`addr` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item destination address handle',
`made` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item made in country index',
`p00v` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 00: 0..4294967295',
`p01v` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 01: 0..4294967295',
`p02v` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 02: 0..4294967295',
`p03v` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 03: 0..4294967295',
`p04v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 04: 0..255',
`p05v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 05: 0..255',
`p06v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 06: 0..255',
`p07v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 07: 0..255',
`p08v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 08: 0..255',
`p09v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 09: 0..255',
`p10v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 10: 0..255',
`p11v` TINYINT UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item int 11: 0..255',
`p12v` SET( 'A','B','C','D','E','F','G','H','I','J','K','L','M',
	'N','O','P' ) NOT NULL DEFAULT ''	COMMENT 'Item set of values',
`p13h` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item str 13 hash value',
`p14h` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item str 14 hash value',
`p15h` INTEGER UNSIGNED NOT NULL DEFAULT 0	COMMENT 'Item str 15 hash value',
`p13v` VARCHAR( 128 ) NOT NULL DEFAULT ''	COMMENT 'Item str 13: 128 chr len',
`p14v` VARCHAR( 128 ) NOT NULL DEFAULT ''	COMMENT 'Item str 14: 128 chr len',
`p15v` VARCHAR( 128 ) NOT NULL DEFAULT ''	COMMENT 'Item str 15: 128 chr len',
`p16v` VARCHAR( 32  ) NOT NULL DEFAULT ''	COMMENT 'Item str 16: 032 chr len',
`p17v` VARCHAR( 32  ) NOT NULL DEFAULT ''	COMMENT 'Item str 17: 032 chr len',
`deli` TEXT NOT NULL				COMMENT 'Item delivery information',
`payi` TEXT NOT NULL				COMMENT 'Item pay information',
`info` TEXT NOT NULL				COMMENT 'Item information text',
`cmsg` TEXT NOT NULL				COMMENT 'Item customer message',


В коде значения полей понимается на основе типа вещи.
Размер таблички большой, но не превышающей максимального значения INT - старые записи удаляются.

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

Вопрос:
Если такой вариант жизнеспособен, как лучше и правильно выстроить индексацию?

Спасибо.
  • Вопрос задан
  • 2201 просмотр
Пригласить эксперта
Ответы на вопрос 1
qmax
@qmax
программер
Если схема данных заранее неизвестна, то имеет смысл посмотреть на безсхемные базы данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы