PHP: Это плохой дизайн, чтобы сериализовать объекты и поместить их в базу данных на потом? - PullRequest
4 голосов
/ 04 февраля 2011

Я планирую и исследую свой переход с MySQL на MongoDB прямо сейчас, и у меня возникла интересная мысль ... У меня есть куча иерархических объектов, которые мне нужно сохранить в базе данных. Мой текущий метод состоит в том, чтобы иметь в коллекции кучу встроенных документов. Их никогда не нужно будет искать. Возможно, имеет смысл просто сериализовать объекты PHP, вставить их в БД, а затем десериализовать их обратно в объекты PHP, когда я захочу их использовать? Альтернативой является использование Doctrine в качестве моей ORM.

Моя интуиция программирования говорит мне, что это плохой дизайн и он ограничивает, но я чувствую, что сериализация и десериализация будут очень быстрыми и устранят необходимость в ORM.

Каково ваше мнение? Хороший дизайн или плохой дизайн?

Ответы [ 4 ]

9 голосов
/ 04 февраля 2011

Во многих случаях это будет считаться плохим дизайном, но это может сработать, если применимо все следующее:

  1. Вам не нужно искать по ним
  2. Вы можете принять (потенциально) ограниченную возможность запрашивать их
  3. Вам не нужна реляционная целостность или другие ограничения, установленные СУБД
  4. Вы знаете, что вам никогда не придется читать их на другом языке
  5. Вы уверены, что знаете, как правильно десериализовать, версия и перенести их при обновлении определения класса
  6. Вы уверены, что формат сериализации PHP будет стабильным во всех выпусках (или вы хотите написать код миграции, или это краткосрочный проект, и вам все равно)
  7. Вы готовы принять незначительное снижение производительности (SELECT + deserialize() будет медленнее, чем просто SELECT)
3 голосов
/ 05 февраля 2011

Зачем использовать базу данных, если вы не можете запросить ее?

1 голос
/ 04 февраля 2011

Все зависит от того, что вы собираетесь делать.

Если это всегда один и тот же объект, с которым имеет дело каждый запрос, или между каждым запросом нет отношений, это может быть нормально.

Но для меня есть много минусов:

  • Возможно, вы захотите сделать что-то более сложное с объектами позже
  • Сериализированные объекты являются ненадежными (не совсем совместимыми с ACID)
  • Нет ничего другого, что может читать сериализованный объект php, вы можете вместо этого использовать что-то другое.
0 голосов
/ 04 февраля 2011

Сериализация объектов ОЧЕНЬ полезна, когда вам нужно кэшировать такие вещи, как RSS-каналы.

Я считаю, что это полезно использовать для сериализации, но я бы также позаботился о том, чтобы это никогда не редактировалось в виде строки без предварительной десериализации!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...