我可能会对此深表思考,但我仍然想知道是否有人对此有任何强烈意见......
我正在使用PHP生成新闻RSS源。每个新闻报道都有很多照片,这些照片反映在我的数据库结构中,故事和照片表之间有1:多的关系。这意味着我正在生成一个类似于:
的结果集 StoryID PHOTOID
1 1
1 2
1 3
2 4
2 5
3 6
4 7
4 8
我正在生成一个嵌套数组来更准确地表示它:
foreach
语句和if
来生成这个,以便在处理每个新行时查看StoryID
是否已经存在 - 有更好的方法吗?是否有内置函数/第三方库可以有效地处理1:多种关系?)有3种可能的选择 - 这些选择中的任何一种都更好吗?:
修改代码,以便生成XML而不生成数组1st
将其保留为数组(因为这似乎是合乎逻辑的)然后使用SimpleXML将其重写为XML(这也意味着如果我想将信息作为JSON或任何其他格式返回,我不会再次重写逻辑,只能格式化数组) - 但是,这特别慢吗?特别是对于大量的RSS项目?
无论上述哪种情况,我都知道有些人在调用PHP时使用PHP编写静态RSS文件(只有在有新数据要添加时才生成新文件),而不是生成每次都有动态的RSS文件 - 这个方法有什么好处吗?
答案 0 :(得分:1)
我正在使用foreach语句生成这个,如果在处理每个新行时看看StoryID是否已经存在 - 有更好的方法吗?是否有内置函数/第三方库可以有效地处理1:多种关系?)
是的,请查看Doctrine(http://doctrine-project.org/)或任何其他体面的ORM(对象关系映射)库。
修改代码,以便生成XML而不生成数组1st
Doctrine也会对此有所帮助 - 不是专门生成XML,而是迭代数据库内容,而不必显式创建数组或跳过任何环节来确定关系。
使用SimpleXML将其重写为XML(这也意味着如果我想以JSON或任何其他格式返回信息,我没有再次重写逻辑,只能格式化数组) - 但是,这特别慢?特别是对于大量的RSS项目?
这听起来不错。我从来没有或听说过SimpleXML的任何性能问题(虽然这可能是我的经验的限制)而另一种选择是什么,自己构建字符串?这容易出错,难以维护,并且可能有自己的性能问题。
在调用PHP时使用PHP编写静态RSS文件(仅在有新数据要添加的情况下生成新文件),而不是每次动态生成RSS文件 - 是否有任何优点这种方法?
听起来你的意思是缓存。您所做的是将生成的XML写入Web服务器上的文件或memcached等缓存服务。然后,无论何时请求RSS,您都要使用另一个时间戳检查文件上的时间戳,该时间戳表示上次更改数据库的时间。如果自文件更新后数据库已更新,则文件已旧,需要重新创建。
优点是,您可以在快速比较两个时间戳后简单地提供静态文件,而不必每次都生成整个文件。这意味着每个请求在服务器上的负载更少,因此,您可以使用相同的服务器基础架构处理更多的同时请求。