![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| abs32 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 3.9.2009 Репутация: 1 Всего: 1 |
Всем доброго времени суток.
От предыдущего разработчика досталась база данных в которой записи хранятся в сериализованном виде. Нужно сделать поиск по этим данным. Сериализация/десериализация реализована функциями serialize/unserialize. Возможные варианты решения: 1) Избавиться от сериализованных данных, выделив под каждый параметр столбец. В этом случае нужна будет переделка всего кода работающего с данной таблицей. 2) Добавить новую таблицу с нужной структурой, которая будет дублировать данные из исходной таблицы. Плохо, данные дублируются. 3) Делать поиск в php-скрипте. Медленно. 4) Использовать библиотеки типа lucene с поиском по индексу. ( кажется бредом но все равно запишу ) Какое решение вы мне посоветуете ? |
|||
|
||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
Можно попробовать составить регулярное вырождение для поиска по стерилизованным данным или LIKE поиск сделать с особой схемой что то вроде такого
с регуляркой похожий способ Это сообщение отредактировал(а) Sanchezzz - 30.8.2012, 18:08 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Код работы с таблицей равномерно размазан по коду? Возможно пора отрефакторить? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Sentox |
|
|||
|
как то так ![]() ![]() Профиль Группа: Участник Сообщений: 392 Регистрация: 27.1.2009 Где: Зимбабве Репутация: 7 Всего: 7 |
Иногда это просто не возможно. Так как концепция может иметь динамическое число данных/параметров, или вообще не иметь, или иметь какое то состояние, причём все с разными параметрами. Это реляционная БД, не объектная, хотя может есть подход избавиться от этого, но пока знаю один способ сохранения состояния в БД, это сериализация. Других способов не придумали. Было бы конечно отлично, если бы на платформе Mysql сделали поиск по сериализованным данным, но увы Конечно если число параметров статично, тогда стоило бы рефакторнуть в нормальную таблицу. Вариант поиска на платформе БД можно посмотреть здесь: http://phpforum.ru/index.php?showtopic=52896 http://stackoverflow.com/questions/4116419...erialized-array http://www.sfmysql.org/messages/boards/thr...?thread=1186429 Это сообщение отредактировал(а) Sentox - 30.8.2012, 20:33 |
|||
|
||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
Перенести можно путем создание таблицы с полями id(инкремент), key, value, idtable где idtable id связного поля откуда вязли массив key имя из массива ну value это значение.
Такое можно переменить если массив одномерный и состоит по ключам Это сообщение отредактировал(а) Sanchezzz - 30.8.2012, 20:59 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
| Sentox |
|
|||
|
как то так ![]() ![]() Профиль Группа: Участник Сообщений: 392 Регистрация: 27.1.2009 Где: Зимбабве Репутация: 7 Всего: 7 |
Супер Но всё таки сложные и динамические состояния стоит хранить в сериализованном виде. |
|||
|
||||
| abs32 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 3.9.2009 Репутация: 1 Всего: 1 |
У меня не тот случай. Число парамеров статично. Кстати, я пока еще не встречался с задачами где бы использовалось динамическое кол-во параметров. В общем все свелось к рефакторингу БД и кода. Некоторые условия ТЗ было не возможно выполнть без изменения структуры храниения данных. И легче было сделать рефакторинг, чем разбираться с запутанной логикой обработки сериализованных данных. Это сообщение отредактировал(а) abs32 - 10.9.2012, 19:40 |
||||
|
|||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
abs32, я вам подскажу 2 разных по типу параметрам объекта в одной базе и в тех же таблицах. У объекта А 10 полей У объекта B 23 поля. Банальный пример недвижимость У дач свои поля У квартир свои У сниму квартиры немножко меньше полей Динамические поля и хранения значений по типу ключ значения позволят быстро модифицировать систему под дополнительные данные Проблемы с поиском у меня еще не было, оптимизацией таких запросов тоже -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |