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

标签 java json postgresql jooq

我在 PostgreSQL 数据库列中有以下形式的 json 数据:

myData [{"key1": "value1", "key2": "value2"}, {"key1": "value1", "key2": "value2"} ]

其中 myData 是一个包含两个对象的数组。 我阅读了以下链接以仅使用 java 解决我的问题,但我的问题略有不同。 Converting JSON to JavaParsing JSON Object in Java

  1. 在数据库 (postgresql) 中提取键/值对会更有效,还是我应该在 java 中获取整个字符串并使用 java 库?甚至可以在数据库中进行吗?

  2. 如果可以选择在数据库中执行此操作,JOOQ 是否为此提供任何支持?

  3. 如果用 Java 进行解析是更好的选择,那么上面链接中给出的两个库中哪个更稳定/更高效? org.json 或 Gson

最佳答案

你有几个有趣的问题。

1。数据库中的查询逻辑与 Java 中的查询逻辑

取决于。首先,在 PostgreSQL 中,jsonb 有更好的索引支持。我不是该主题的专家,但我很确定一旦您对 1-2 件事进行基准测试,您就会得出这个结论。这是一篇比较不同数据类型在 PostgreSQL 中的性能的有趣博客文章:

http://www.databasesoup.com/2015/01/tag-all-things.html

... 这让我想到了是将谓词放入您的 SQL 查询中,还是稍后在 Java 中执行它们。总的来说:把它放在数据库中。如果您的谓词非常有选择性,那么您可以:

  1. 避免数据库中大量不必要的 I/O
  2. 数据库避免大量不必要的 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/

相关文章:

java - 如何比较枚举值?

java - 使用 Scanner 将多个输入分配给多个变量

c# - Json.NET 配置序列化程序以重用相等标记的对象实例

sql - 使用模型关联查找

python - Django-Cities-Light,在 postgresql 中将字段更改为foreignkey会引发错误

node.js - 如何从数据库中清除过期的 token ?

java - 正则表达式正则表达式Java字符串

java - 重定向到创建的实体

javascript - 使用 JS 从 PHP 导入图表列的值

c# - 使用 C# ASP.NET WebAPI 2.0 在 InputModel 主体中绑定(bind) NodaTime Instant 字段