数据库设计:如何在数据库中存储 XML/JSON?

Posted

技术标签:

【中文标题】数据库设计:如何在数据库中存储 XML/JSON?【英文标题】:Database Design: how to store XML/JSON in database? 【发布时间】:2011-11-03 03:36:20 【问题描述】:

我可以访问返回 XML 或 JSON 的 Web 服务。由于 Web 服务调用很昂贵,我想将 XML/JSON 存储在我的数据库中,以便我可以更快地访问数据。我的问题是我应该将整个 XML/JSON 存储在一个字段中,还是应该设计一个以标准化方式表示 XML/JSON 的数据库模型?

如果我只是需要 XML/JSON 数据可供我使用,那么将其作为字符串保存在字段中就可以了。

但是,我知道我只需要提取某些 XML/JSON 文档——所以我需要能够查询这个。对于简单的查询,如果我在 XML 文档的标题标签之间搜索“hello world”,也许我可以使用 LIKE %<title>hello world</title>% 之类的东西。但我认为我的一些查询可能超出了字符串匹配(例如大于某个数字或日期等)。所以我觉得我需要在我的数据库中正确地建模这些数据,并用来自 XML/JSON 的值填充它。不过,这将成为一项痛苦的练习。

关于我应该做什么的任何提示?也许有一个我没有考虑过的选项。

【问题讨论】:

【参考方案1】:

听起来您确实需要将 XML/JSON 文档转换为一组不同的字段。

那里有可以返回本机​​ JSON 的 DB,但您通常会使用应用层。

当确实没有明显需要访问单个字段时,我通常存储纯 XML/JSON。例如,我会将控制数据以 XML 格式存储在 BLOB 字段中,因为我通常不需要搜索特定的控制字符串。

您可能需要考虑的一件事是使用 MongoDB 或 Couch 等 noSQL 解决方案来存储 JSON。您可以放置​​ JSON 字符串并直接将其拉出,也可以访问各个字段。

像 MongoDB 和 Couch 这样的文档数据库让您可以灵活地在本地存储和检索 JSON 文档以及访问和搜索 JSON 文档中的各个字段,而无需提前知道文档的内容用过的。它实际上只是消除了将关系数据转换为结构化文档以及将结构化文档转换为关系数据的几个步骤。

当我将 XML 直接存储在 BLOB 中时,任何可搜索的数据都将位于 BLOB 之外的字段中。磁盘空间相对便宜,这是一个小的反规范化。当然,您必须确保在更新 JSON/XML 文档时保持字段更新,但这在应用层很容易做到。

【讨论】:

Brian - MongoDB 如何帮助我处理 JSON?我仍然可以从 mysql 中提取 XML/JSON,然后查询每个项目。问题是我想我想根据 XML/JSON 中的某些值进行查询。 只提取我需要能够查询的数据,然后将其余的 XML/JSON 留在一个字段中,这是一个好主意吗?我觉得这会构成重复数据——因此不会标准化。

以上是关于数据库设计:如何在数据库中存储 XML/JSON?的主要内容,如果未能解决你的问题,请参考以下文章

信息标记的三种形式

java如何读写json文件

Python高级语法——格式化文件——学习心得笔记

Qt之JSON数据

JSON 语法 数据格式

Qt 操作Json格式文件(创建插入解析修改删除)