使用jooq / postgresql从json提取键/值对-Java

我以以下形式在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

由于您的基准测试可能与我的测试基准不同,因此我在这里不作答.

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...