我以以下形式在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
由于您的基准测试可能与我的测试基准不同,因此我在这里不作答.