我在 PostgreSQL 数据库列中有以下形式的 json 数据:
myData [{"key1": "value1", "key2": "value2"}, {"key1": "value1", "key2": "value2"} ]
其中 myData
是一个包含两个对象的数组。
我阅读了以下链接以仅使用 java 解决我的问题,但我的问题略有不同。
Converting JSON to Java和
Parsing JSON Object in Java
在数据库 (postgresql) 中提取键/值对会更有效,还是我应该在 java 中获取整个字符串并使用 java 库?甚至可以在数据库中进行吗?
如果可以选择在数据库中执行此操作,JOOQ 是否为此提供任何支持?
如果用 Java 进行解析是更好的选择,那么上面链接中给出的两个库中哪个更稳定/更高效? org.json 或 Gson
最佳答案
你有几个有趣的问题。
1。数据库中的查询逻辑与 Java 中的查询逻辑
这取决于。首先,在 PostgreSQL 中,jsonb
有更好的索引支持。我不是该主题的专家,但我很确定一旦您对 1-2 件事进行基准测试,您就会得出这个结论。这是一篇比较不同数据类型在 PostgreSQL 中的性能的有趣博客文章:
http://www.databasesoup.com/2015/01/tag-all-things.html
... 这让我想到了是将谓词放入您的 SQL 查询中,还是稍后在 Java 中执行它们。总的来说:把它放在数据库中。如果您的谓词非常有选择性,那么您可以:
- 避免数据库中大量不必要的 I/O
- 数据库避免大量不必要的 I/O
这两者都会大大降低您的查询延迟。如果您的谓词不是很有选择性,那么这几乎不会成为问题,除非在极端负载下。但是,如果您的系统处于极端负载下并且您的谓词是有选择性的,那么如果您在数据库中运行谓词,您仍然会大大减少负载。
2。 jOOQ 对 JSON 谓词的支持
jOOQ 目前不提供任何开箱即用的 JSON(B) 谓词支持,但您可以使用 jOOQ 的纯 SQL 支持轻松地自己构建一个实用程序:
http://www.jooq.org/doc/latest/manual/sql-building/plain-sql
本质上,只要写:
public static Condition someJsonPredicate(Field<?> someJsonColumn, String someValue) {
return DSL.condition("some_json_predicate({0}, {1})",
someJsonColumn, DSL.val(someValue));
}
3。 org.json 与 Gson
我不会在这里回答这部分,因为您的基准可能与我的不同。
关于java - 使用 jooq/postgresql 从 json 中提取键/值对 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39706330/