gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:57:24 24 4
gpt4 key购买 nike

我想知道我应该如何为一个相当简单的 php 网站编写 XML 数据层。这样做的原因是:

  1. 数据库服务器不可用。
  2. 可以用 xml 表示的简单数据模式。
  3. 我喜欢拥有独立应用程序的想法,不依赖于服务器。
  4. 我可能想将它抽象为一个小框架,以便在其他项目中重用。

该架构类似于一个简单的图书目录,其中包含一些查找表和 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 对象数组。对于保守的搜索,我可能会在第一个找到的项目上中断。

我要问的问题是:

  1. 您是否认为这是一个可行的解决方案,即使对于大中型数据存储也是如此?
  2. 在 PHP 中处理 XML 时,是否需要牢记任何注意事项/模式?
  3. 以上代码是否适用于大文件 (100mb)?
  4. 能否以低开销的方式处理大型 xml 文件中的插入和更新?
  5. 您会推荐一种替代数据格式作为更好的选择吗?

最佳答案

If you have a saw and you need to pound in a nail, don't use the saw. Get a hammer. (folk saying)

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

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

回答您的问题:

  1. 可行的解决方案 - 不,绝对不是。 XML 有其目的,但模拟数据库不是目的,即使对于小型数据集也是如此。
  2. 使用 XML,您一直在打乱字符串。这在读取时可能只是可以忍受,但在写入时却是一场真正的噩梦(解析速度慢、内存占用大等)。虽然您可以颠覆 XML 使其用作数据存储,但它只是不适合这项工作的工具。
  3. 不(如果您在此之前没有耗尽内存,一切都将永远持续下去)。
  4. 不,有很多原因(锁定、重写整个 XML 字符串/文件,更不用说内存了)。

5a。 SQLite设计时考虑了非常小和简单的数据库 - 简单,没有服务器依赖性(数据库包含在一个文件中)。正如@Robert Gould 指出的那样 in a comment , 它不能扩展到更大的应用程序,但是

5b。对于大中型数据存储,请考虑关系数据库(切换数据库通常比从 XML 切换到数据库更容易)。

关于php - XML 作为 PHP 应用程序的数据层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/717003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com