当前位置:  开发笔记 > 编程语言 > 正文

XML作为PHP应用程序的数据层

如何解决《XML作为PHP应用程序的数据层》经验,为你挑选了1个好方法。

我想知道如何为一个相当简单的php网站编写XML数据层.原因是:

    数据库服务器不可用.

    可以用xml表示的简单数据模式.

    我喜欢拥有自包含应用程序的想法,没有服务器依赖性.

    我可能想将它抽象为一个小框架,以便在其他项目中重用.

该模式类似于一个简单的图书目录,其中包含一些查找表和i18n.因此,表达起来非常简单.

主xml文件的大小在100kb到15mb的范围内.但它可能会在某种程度上增长到~100mb.

我实际上正在考虑扩展我的模型类来处理xml数据.目前我使用XMLReader和SimpleXml的组合来获取数据,如下所示:

public function find($xpath){            

    while($this->xml_reader->read()){

        if($this->xml_reader->nodeType===XMLREADER::ELEMENT && 
           $this->xml_reader->localName == 'book' ){


            $node = $this->xml_reader->expand();
            $dom = new DOMDocument();
            $n = $dom->importNode($node, true);
            $dom->appendChild($n);
            $sx = simplexml_import_dom($n); 


            // xpath returns an array

            $res = $sx->xpath($xpath);

            if(isset($res[0]) && $res[0]){

                $this->results[] = $res;                        
            }
    }

    return $this->results;
}

因此,我不是将整个xml文件加载到内存中,而是为每个部分创建一个SimpleXml对象,并对该对象运行xpath查询.该函数返回SimpleXml对象的数组.对于保守搜索,我可能会破坏第一个找到的项目.

我要问的问题是:

    您是否认为这是一个可行的解决方案,即使对于大中型数据存储也是如此?

    在PHP中处理XML时,是否需要记住任何注意事项/模式?

    以上代码是否适用于大文件(100mb)?

    可以低开销的方式处理大型xml文件中的插入和更新吗?

    您是否建议使用其他数据格式作为更好的选择?

Piskvor cc-b.. 5

如果你有锯子,你需要敲钉子,不要使用锯子.得到一把锤子.(民间谚语)

换句话说,如果您想要数据存储,请使用数据库,而不是标记语言.

PHP通过PDO对各种数据库系统提供了很好的支持; 对于小型数据集,您可以使用SQLite,它不需要服务器(它存储在普通文件中).之后,如果您需要切换到功能齐全的数据库,这很简单.

回答你的问题:

    可行的解决方案 - 不,绝对不是.XML有其目的,但模拟数据库不是一个,即使对于小数据集也是如此.

    使用XML,你一直在改变字符串.这可能只是在阅读时可忍受,但在写入时是一个真正的噩梦(解析速度慢,内存占用空间大等).虽然您可以破坏XML以作为数据存储工作,但它只是工作的错误工具.

    不(如果你之前的内存不足,一切都将永远消失).

    不,有很多原因(锁定,重写整个XML字符串/文件,更不用说内存了).

5A.SQLite的设计考虑了非常小而简单的数据库 - 简单,没有服务器依赖(db包含在一个文件中).正如@Robert Gould 在评论中指出的那样,它不适用于较大的应用程序,但随后

5B.对于中型到大型数据存储,考虑一个关系数据库(通常更容易切换数据库而不是从XML切换到数据库).



1> Piskvor cc-b..:

如果你有锯子,你需要敲钉子,不要使用锯子.得到一把锤子.(民间谚语)

换句话说,如果您想要数据存储,请使用数据库,而不是标记语言.

PHP通过PDO对各种数据库系统提供了很好的支持; 对于小型数据集,您可以使用SQLite,它不需要服务器(它存储在普通文件中).之后,如果您需要切换到功能齐全的数据库,这很简单.

回答你的问题:

    可行的解决方案 - 不,绝对不是.XML有其目的,但模拟数据库不是一个,即使对于小数据集也是如此.

    使用XML,你一直在改变字符串.这可能只是在阅读时可忍受,但在写入时是一个真正的噩梦(解析速度慢,内存占用空间大等).虽然您可以破坏XML以作为数据存储工作,但它只是工作的错误工具.

    不(如果你之前的内存不足,一切都将永远消失).

    不,有很多原因(锁定,重写整个XML字符串/文件,更不用说内存了).

5A.SQLite的设计考虑了非常小而简单的数据库 - 简单,没有服务器依赖(db包含在一个文件中).正如@Robert Gould 在评论中指出的那样,它不适用于较大的应用程序,但随后

5B.对于中型到大型数据存储,考虑一个关系数据库(通常更容易切换数据库而不是从XML切换到数据库).

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有