具有XPath和MySql的MySql与MongoDB一致,用于不寻常的结构要求

时间:2012-01-07 21:26:35

标签: mysql xml mongodb database-design nosql

如果您的数据库需要包含complex relationships/constraints,那么您宁愿:

  • Option 1:一个简单的MySql结构,在一个表中包含一个XML字段,您可以使用XPath(ExtractValue())进行查询。
  • Option 2:相同的简单MySql结构以及包含MongoDB等效XML *的单独MongoDB设置,

为什么?


假设:

  • 如果需要删除整个实体,选项1会更容易(只需删除整个元组)。
  • MongoDB查询比XPath更快。但这需要在MySql查询之后完成,除非在先前的查询中检索到ID。
  • 使用选项2可以更快/更轻松地进行小更新,因为使用MySql的XML函数UpdateXML(),您只能更新XML的整个
  • 必须更加小心选项2;插入/更新时,如果MySql插入/更新查询失败,我必须确保不插入/更新MongoDB。
  • 忽略'简单的MySql结构'部分(连接等),我只能用ExtractValue()做很多事情(选项1);我需要检索大量的XML,然后在PHP / JS中完成剩下的工作。而MongoDB可以处理更多。

备注:

  
      
  • *加上与其所属的MySql元组对应的ID。
  •   
  • 如果我对自己的任何假设都错了,请纠正我。
  •   

编辑:

无论哪种方式,它都是PHP或JS通过PHP我将用于与数据库进行交互。

1 个答案:

答案 0 :(得分:0)

您绝对可以将结构存储在MongoDB中。通常,BSON比使用XML来表示复杂关系(并且您也可以从shell中干净地读取/编辑它)容易/清洁。 MongoDb中有很多原子操作,可以快速轻松地进行修改。

查看这些操作以获取就地文档更新:

http://www.mongodb.org/display/DOCS/Updating

您还可以提取文档的各个字段/部分:

http://www.mongodb.org/display/DOCS/Advanced+Queries

出于并发目的,如果有多个应用程序/线程同时进行更改,也可以使用findAndModify。

http://www.mongodb.org/display/DOCS/findAndModify+Command