4

我现在正在计划和研究我从 MySQL 到 MongoDB 的转换,我刚刚有了一个有趣的想法……我有一堆需要存储在数据库中的分层对象。我目前的方法是在一个集合中包含一堆嵌入式文档。他们永远不需要被搜索。仅序列化 PHP 对象,将它们粘贴到数据库中,然后在我想使用它们时将它们反序列化回 PHP 对象是否有意义?另一种方法是使用 Doctrine 作为我的 ORM。

我的编程直觉告诉我,这是一个糟糕的设计并且受到限制,但我觉得序列化和反序列化会非常快,并且不需要 ORM。

你怎么看?好设计还是坏设计?

4

4 回答 4

10

在许多情况下,这会被认为是糟糕的设计,但如果满足以下所有条件,它可能会起作用:

  1. 您无需搜索它们
  2. 您可以接受(可能)有限的查询能力
  3. 您不需要关系完整性或 RDBMS 强制执行的其他约束
  4. 你知道你永远不需要用不同的语言阅读它们
  5. 当您更新您的类定义时,您有信心知道如何正确地反序列化、版本化和迁移它们
  6. 您有信心 PHP 序列化格式会在不同版本之间保持稳定(或者您愿意编写迁移代码,或者它是一个短期项目并且您不在乎)
  7. 您愿意接受轻微的性能损失(SELECT+deserialize()会比 just 慢SELECT
于 2011-02-04T02:53:05.457 回答
3

如果无法查询,为什么要使用数据库?

于 2011-02-04T21:42:12.200 回答
1

这完全取决于你打算做什么。

如果每个请求处理的对象总是相同的,或者每个请求之间没有关系,那可能没问题。

但对我来说有很多缺点:

  • 您可能希望稍后对对象执行更高级的操作
  • 序列化对象有点不可靠(不完全符合 ACID)
  • 没有其他东西可以读取序列化的 php 对象,您可能想要使用其他东西。
于 2011-02-04T02:48:20.317 回答
0

当您必须缓存事物(例如 RSS 提要)时,序列化对象非常有用。

我发现序列化它很有用,但我还要确保如果不先反序列化它就永远不能作为字符串编辑!

于 2011-02-04T03:59:42.543 回答