Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2012, 01:27   #1
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию Сжать строчку из цифр для хранения в БД

Всем привет! Есть таблица, в которой должно быть около 1.5 млн записей. В ней хранятся строки вида "10211200" и "3501002100011100000213232011201231 010734"
- просто наборы цифр фиксированной длины.
Посоветуйте как сжать эти данные, чтоб таблица не занимала много места и чтобы потом быстро при выборке на PHP можно было привести к исходному виду.
Заранее благодарен вам!

З.Ы. Данные добавляются на PHP - то есть просто нужна какая нибудь функция для сжатия/распаковки. А может и не VARCHAR тут понадобится даже а что-то другое.

Последний раз редактировалось Mr_freeman; 19.12.2012 в 01:31.
Mr_freeman вне форума Ответить с цитированием
Старый 19.12.2012, 02:06   #2
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

1.Если эти наборы цифр не имеют четкого алгоритма создания, то никак их не ужмешь.
2.Если наборы цифр фиксированной длины, то varchar с указанием длины это самое оно.
3.Если грамотно распланировать выборку и не извлекать сразу все 1.5 млн записей, то БД вполне справится.

Из того, что первое на мысль пришло - переводить числа в 16-ричную систему, это сократит запись, но я сомневаюсь, что это рентабельно.
Чтоб сказать больше, надо понимать откуда эти числа берутся и как они будут потом использоваться.

Последний раз редактировалось Mortimoro; 19.12.2012 в 02:09.
Mortimoro вне форума Ответить с цитированием
Старый 19.12.2012, 04:06   #3
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

Каждая цифра берется рандомно из фиксированного промежутка. К примеру, первое - от 0 до 4, второе - от 0 до 9, и т. д.
Может как то преобразовать их в буква или символы какие то, чтоб сократить длину. Например взять первые три цифры - один символ, следующие три цифры - второй символ и т. д. Кодировка utf8.
Mr_freeman вне форума Ответить с цитированием
Старый 19.12.2012, 07:42   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

для чего такие строки цифр ? Объясните? может они вообще и не нужны....
ADSoft вне форума Ответить с цитированием
Старый 19.12.2012, 10:59   #5
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

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

У нас динамичная база, которая постоянно расширяется, поэтому приходится уделять много внимания на экономию физической памяти.
Mr_freeman вне форума Ответить с цитированием
Старый 19.12.2012, 11:12   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

как вариант - если данные наборы цифр "влезают" в числовые форматы... хранить числами.. то есть не varchar(12) а int(12) ...явная экономия. Если не умещаются... то есть библы для работы с большими числами вроде
ADSoft вне форума Ответить с цитированием
Старый 19.12.2012, 11:27   #7
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

Для второго столбика думаю подойдет, если int(8). А для первого не знаю. Встречался на PHP с такой штукой как BCMath, но как она может помочь. Если не ошибаюсь, она используется для операций над боооольшими цифрами.
Mr_freeman вне форума Ответить с цитированием
Старый 19.12.2012, 11:38   #8
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

определись с размером самой большой строки... уже оттуда можно искать нужный тип данных
ADSoft вне форума Ответить с цитированием
Старый 19.12.2012, 12:09   #9
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

Первая строчка из 40 символов, вторая из 8. И так в каждой строке таблицы:

Mr_freeman вне форума Ответить с цитированием
Старый 19.12.2012, 12:26   #10
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

посмотри тут http://kbss.ru/blog/bd_mysql/153.html про типы рсписано
З.Ы. надеюсь что id_cat число а не строка? )))
ADSoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структура данных для хранения предметов L_M Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 15.11.2010 21:08
Структура для хранения произвольной мелодии LordotU Помощь студентам 5 02.10.2010 22:21
Программа для хранения паролей [help] DimOn4Ik Общие вопросы Delphi 10 23.10.2009 22:51
Компонент для хранения информации. IVANSour Компоненты Delphi 7 28.01.2009 03:02