【发布时间】:2010-10-05 01:29:07
【问题描述】:
我在数据库中存储了一个表示一组属性的 JSON 字符串。在后面的代码中,我将其导出并用于一些自定义逻辑。本质上,我只是将它用作存储机制。我知道 XML 更适合于此,但我读到 JSON 更快且更受欢迎。
如果不打算在客户端使用字符串,那么使用 JSON 是一种好习惯吗?
【问题讨论】:
标签: javascript asp.net database json
我在数据库中存储了一个表示一组属性的 JSON 字符串。在后面的代码中,我将其导出并用于一些自定义逻辑。本质上,我只是将它用作存储机制。我知道 XML 更适合于此,但我读到 JSON 更快且更受欢迎。
如果不打算在客户端使用字符串,那么使用 JSON 是一种好习惯吗?
【问题讨论】:
标签: javascript asp.net database json
JSON 是存储结构化数据的一种完全有效的方式,并且比 XML 更简单、更简洁。我不认为使用它是一种“不好的做法”,原因与使用 XML 的原因相同,只要您理解并且可以接受它的局限性。
【讨论】:
是的,我认为 JSON 很棒。它是一个开放标准,可以被任何编程语言使用。大多数编程语言也有解析和编码 JSON 的库。
【讨论】:
我不能说这是一种好的做法,但它让我觉得很奇怪。在 SQL 数据库中包含 XML 字段至少是可查询的(SQL Server 2000 或更高版本、MySQL 等),但通常是元数据的最后手段。
JSON 通常是 JavaScript 和后端之间的载体,而不是存储本身,除非您有 JSON 后端 document orientated database,例如 CouchDB 或 SOLR,因为 JSON 非常适合存储文档。
并不是说我不同意将 JSON 用作基于 XML 的简单(即不序列化引用)数据序列化器,但我不会仅仅为了它而讨论 JSON 与 XML 之争:) .
如果您没有使用 JSON 来实现 2 种语言之间的可移植性,并且您确信永远不会从 SQL 查询数据,那么使用 .NET 的默认序列化会更好。
【讨论】:
JSON 更短,因此它会在您的数据库中使用更少的空间。我可能会使用它而不是 XML 或编写我自己的格式。
另一方面,搜索匹配项会很糟糕——你将不得不使用“where json like '% somevalue %'”,这将非常缓慢。这与任何其他文本存储策略(包括 xml)相同。
【讨论】:
JSON 只是一种类似于 XML 的标记语言,由于其规范更严格,因此体积更小,生成和解析速度更快。因此,从这方面来看,如果您需要临时结构化标记,那么在数据库中使用它是完全可以接受的(并且您绝对确定使用表是不可能的和/或最佳解决方案)。
但是,您没有说明您使用的是什么数据库。如果是 SQL Server 2005 或更高版本,那么数据库本身在处理 XML 时具有广泛的功能,包括 XML 数据类型、XQuery 支持以及将 XQuery 表达式作为执行计划的一部分进行优化的能力。因此,如果是这种情况,我会更倾向于使用 XML 并利用数据库的功能。
【讨论】:
您不是唯一一个使用 JSON 进行数据存储的人。 CouchDB 是一个面向文档的数据库,它使用 JSON 来存储信息。他们最初将该信息存储为 XML,然后切换到 JSON。查询是通过旧的 HTTP 完成的。
顺便说一句,CouchDB 最近受到了一些关注,并得到了 IBM 和 Apache Software Foundation 的支持。它是用 Erlang 编写的,并且承诺很多(恕我直言)。
【讨论】:
请记住,JSON 具有与 XML 作为后端数据存储相同的所有问题;也就是说,它绝不会取代关系数据库甚至是固定大小的二进制格式。如果您有数百万行并且需要随机访问,那么使用 JSON 会遇到与使用 XML 相同的基本性能问题。我怀疑你是否打算将它用于这种数据存储场景,但你永远不知道......已经尝试过奇怪的事情:)
【讨论】:
您不应该使用 JSON 或 XML 在关系数据库中存储数据。 JSON 和 XML 是序列化格式,可用于将数据存储在文件中或通过网络发送。
如果你想存储一组属性,只需为其创建一个表,每一行都对应一个属性。这样就可以使用普通的 SQL 查询数据了。
【讨论】: