【问题标题】:XML as a databaseXML 作为数据库
【发布时间】:2010-01-28 23:02:25
【问题描述】:

我一直在阅读有关 XML、XSL、XPath 等的文章。我想在 PHP 中启动这个小脚本,使用 XML 作为数据库来创建一个简单的 CRUD 应用程序。我将使用 SimpleXML,但在阅读了一些关于 stackoverflow 的答案后,似乎很多人建议使用 DOMDocument(使用 DOMDocument 有什么比使用 SimpleXML 更有好处的吗?)

不管怎样,困扰我的是如何在他们身上贴上身份证?我应该从“1”开始,然后当有人添加一个节点时,增加它等等?

还有类,我想放一个有这种结构的

Parent  
 - Children          
 - Children  
   - Subchildren  

我对如何将它放入 XML 有一个想法,但我的问题是解析它们。

无论如何,类别并没有真正让我感到困扰。我更想知道是否应该将 ID 计数保存在 XML 中并将其用作“参考”。

【问题讨论】:

    标签: php xml database


    【解决方案1】:

    你说“XML 作为数据库。” XML 只是一种标记语言,所以你真正的意思是 一个文件 作为数据库” 那将是一个错误。您会遇到并发问题、可能的损坏和大量其他问题,更不用说大型 XML 文档的糟糕性能了。

    如果您需要的是数据库,那么只需使用它:数据库。不是文件。

    SQLite 使用简单且速度足够快,可用于轻负载,尽管它缺少 phpMyAdmin 的良好对应物。否则,您的虚拟主机肯定会提供 MySQL 数据库。

    【讨论】:

    • 是的,这是一个愚蠢的标题错误 :) 尽管建议使用某些 RDBMS,但我仍然会继续。不是因为我是一个固执的人,无视所有显而易见的答案,而是因为我只需要尝试一下,它既不适用于商业产品等,也不适用于测试。只是测试
    • 嗯,那么答案是:SimpleXML,而不是 DOM。如果您需要 DOM 方法,例如如果您需要按 ID 删除节点,请尝试 SimpleDOM - code.google.com/p/simpledom
    • 另外,由于你没有并发控制,所以不要尝试创建连续的 ID,而是使用 PHP 的 uniqid()。
    【解决方案2】:

    作为一个练习,这有点有趣,但是每个人都告诉你不要为此使用 XML 是正确的。 RDBMS 是您读写存储的典型最佳解决方案。

    至于你的问题,我很可能会在我关心的任何节点上添加一个id 属性,并为其添加一个id。然后,如果我使用 DOM 扩展,我会使用setAttribute,或者如果我使用 SimpleXML,我会使用addAttribute

    但是在 PHP 中处理 XML 还有更多的解决方案。我会看看很多,看看哪个最能满足您的需求。

    祝你好运。

    【讨论】:

    • 我知道使用 XML 进行存储很糟糕,但它让我很感兴趣,这就是我想尝试这样做的原因:)
    【解决方案3】:

    IMO 我会避免在 xml 中保留 id 计数。如果您想将其作为 var 缓存在脚本中,我认为这没问题 - 那么只需在您第一次添加该类型的新元素时根据需要对该特定元素进行计数。否则,如果文件中的 id 计数实际上并未计算元素的 id 计数,您可能会遇到问题。但是,如果这是一个有多个用户的应用程序,您可能会遇到竞争条件领域,因为如果在其他人仍在工作时将任何内容写入磁盘,您可能并不总是有准确的计数。您可能希望将计数缓存在一个简单的文本文件或其他内容中。

    【讨论】:

      【解决方案4】:

      好吧,我不会帮助你,但我会给你建议:不要。 XML 与 SQLLite 相比非常慢。为什么需要 XML?

      【讨论】:

      • 太有帮助了 :),因为我对使用 MySQL、SQLite 或任何类型的 DBMS 不感兴趣,想要弄脏 XML 并使用它
      • 这完全取决于你需要什么/你想要达到什么。如果需要数据库,请使用数据库。如果您想尝试使用 XML,那么请找到一个有用且广泛使用 XML 的领域。例如,Web 服务。
      • XML 对于配置等非常有帮助,但恕我直言,对于“真实”数据库来说不是那么好的选择......
      【解决方案5】:

      我要在这里反其道而行之,说使用平面文件数据库(在本例中为 XML)没有任何问题

      有利有弊,对于许多人来说,处理这些不利因素似乎势不可挡,并建议平面文件是一种糟糕的方式。它是错误的,而不是这种概括。 更有建设性的方法是指出缺点,而不是谴责平面文件作为一种选择。

      有一些平面文件数据库的成功实现,例如基于getsimple XML 的CMS。我认为您可能能够浏览该代码并了解他们使用 XML 做了什么。

      我相信,当使用更简单的东西就足够时,通常会使用 sql 数据库。 Sql 数据库也不是损坏或防黑客攻击的,它总是归结为实现。

      【讨论】:

      • 我工作的一位开发人员使用手动目录树、平面文件 xml 数据库创建了一个项目。我现在有大约 15,000 条记录,但有时会出现一些奇怪的行为,并且存储了大约 100,000 多个文件来维护数据。这很荒谬。我建议使用正式的 XML 数据库,而不是自己创建 xml 文件 db。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 2014-02-06
      相关资源
      最近更新 更多