如果你的数据库需要包含complex relationships/constraints你愿意:
选项 1
:一个简单的 MySql 结构,在一个表中包含一个 XML 字段,您将使用 XPath (ExtractValue()) 对其进行查询。选项 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 可以处理更多。
注意事项:
*
plus the ID corresponding to the MySql tuple which it belongs.- Correct me if I am wrong about any of my assumptions.
编辑:
无论哪种方式,我都将使用 PHP 或 JS 通过 PHP 与数据库进行交互。
最佳答案
您绝对可以将结构存储在 MongoDB 中。通常,BSON 比使用 XML 表示复杂关系更容易/更清晰(您也可以从 shell 中清晰地读取/编辑它)。 MongoDb 中有很多原子操作,使得修改变得快速和容易。
查看就地文档更新的这些操作:
http://www.mongodb.org/display/DOCS/Updating
您还可以提取文档的各个字段/部分:
http://www.mongodb.org/display/DOCS/Advanced+Queries
出于并发目的,如果您有多个应用程序/线程同时进行更改,您还可以使用 findAndModify。
关于带有 XPath 的 MySql 与 MySql 与 MongoDB 一致以满足不寻常的结构要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8804402/