![]() |
Модераторы: 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. |