Сжатие текста перед хранением в базе данных

Мне нужно хранить очень большой объем текста в базе данных mysql. Это будут миллионы записей с типом поля LONGTEXT и размер базы данных будет огромным.

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

Что-то вроде:

$archived_text = compress_text($huge_text);
// saving $archived_text to database here
// ...

// ...
// getting compressed text from database
$archived_text = get_text_from_db();
$huge_text = uncompress_text($archived_text);

Есть ли способ сделать это с помощью php или mysql? Все тексты в кодировке utf-8.

UPDATE

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

CREATE TABLE `book_parts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `book_id` int(11) NOT NULL,
  `title` varchar(200) DEFAULT NULL,
  `content` longtext,
  `order_num` int(11) DEFAULT NULL,
  `views` int(10) unsigned DEFAULT '0',
  `add_date` datetime DEFAULT NULL,
  `is_public` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `published_as_draft` tinyint(3) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `key_order_num` (`order_num`),
  KEY `add_date` (`add_date`),
  KEY `key_book_id` (`book_id`,`is_public`,`order_num`),
  CONSTRAINT FOREIGN KEY (`book_id`) REFERENCES `books` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

В настоящее время она имеет около 800k записей и весит 4 GB, 99% запросов - SELECT. У меня есть все основания полагать, что цифры растут по диаграмме. Я бы не хотел хранить тексты в файлах, потому что там довольно тяжелая логика, а мой сайт имеет довольно много посещений.

12
задан Silver Light 22 November 2011 в 15:29
поделиться