0

我可能想得太深了,但我仍然想知道是否有人对此有任何强烈的意见......

我正在使用 PHP 生成新闻 RSS 提要。每个新闻故事都有很多照片,这反映在我的数据库结构中,Stories 和 Photos 表之间的关系是 1:many。这意味着我正在生成一个看起来像这样的结果集:

StoryIDPhotoID
     1          1     
     1          2     
     1          3     
     2          4     
     2          5     
     3          6     
     4          7     
     4          8     

我正在生成一个嵌套数组来更准确地表示这一点:

  • 我只是使用一个foreach语句if来生成它,并查看StoryID在处理每个新行时是否已经存在 - 有没有更好的方法?是否有可以有效处理 1:many 关系的内置函数/第 3 方库?)

然后有 3 种可能的选择 - 这些在哲学上是否更好?:

  • 修改代码,使生成 XML 而不生成数组 1st

  • 将其保留为数组(因为这似乎合乎逻辑),然后使用 SimpleXML 将其重写为 XML(这也意味着如果我想以 JSON 或任何其他格式返回信息,我不必再次重写逻辑并且可以格式化数组)-但是,这特别慢吗?特别是对于大量的 RSS 项目?

  • 无论上述哪种情况,我知道有些人在调用 PHP 时使用 PHP 编写静态 RSS 文件(只有在要添加新数据时才会生成新文件),而不是每次都动态生成 RSS 文件时间 - 这种方法有什么好处吗?

4

1 回答 1

1

我只是使用 foreach 语句来生成它,如果在处理每个新行时查看 StoryID 是否已经存在 - 有没有更好的方法?是否有可以有效处理 1:many 关系的内置函数/第 3 方库?)

是的,请查看 Doctrine ( http://doctrine-project.org/ ) 或任何其他体面的 ORM(对象关系映射)库。

修改代码,使生成 XML 而不生成数组 1st

Doctrine 也将对此有所帮助 - 不是专门生成 XML,而是遍历数据库内容,而不必显式创建数组或跳过任何箍来确定关系。

使用 SimpleXML 将其重写为 XML(这也意味着如果我想以 JSON 或任何其他格式返回信息,我无需再次重写逻辑,只需格式化数组即可) - 但是,这是否特别慢? 特别是对于大量的 RSS 项目?

这听起来是个好主意。我从来没有听说过 SimpleXML 的任何性能问题(尽管这可能是我经验的限制),而另一种选择是,自己构建字符串?这很容易出错,难以维护,并且可能有其自身的性能问题。

在调用 PHP 时使用 PHP 编写静态 RSS 文件(只有在要添加新数据时才会生成新文件),而不是每次都动态生成 RSS 文件 - 这种方法有什么优点吗?

听起来你的意思是缓存。您所做的是将生成的 XML 写入 Web 服务器上的文件,或写入缓存服务(如 memcached)。然后,无论何时请求 RSS,您都可以使用另一个时间戳来检查文件上的时间戳,该时间戳表示对数据库进行最后一次更改的时间。如果自文件更新后数据库已更新,则该文件是旧文件,需要重新创建。

优点是您可以在快速比较两个时间戳后简单地提供静态文件,而不必每次都生成整个文件。这意味着每个请求对服务器的负载更少,因此,您可以使用相同的服务器基础架构处理更多的并发请求。

于 2013-08-18T14:00:01.477 回答