Извлечение пар ключ / значение из json с помощью jooq / postgresql - java

2

У меня есть данные json в столбце базы данных PostgreSQL в следующей форме:

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

где myData - это массив, содержащий два объекта. Я прочитал следующие ссылки для решения моей проблемы только с java, но мой вопрос несколько отличается. Преобразование JSON в Java и Parsing JSON Object в Java

  1. Было бы более эффективно извлекать пары ключ/значение в базе данных (postgresql) или я должен получить всю строку в java и использовать java-библиотеки? Возможно ли это в базе данных?

  2. Если это сделать в базе данных, это вариант, поддерживает ли JOOQ какую-либо поддержку?

  3. Если синтаксический анализ на Java является лучшим вариантом, какая из двух библиотек, приведенная в приведенных выше ссылках, более стабильна/эффективна? org.json или Gson

  • 0
    Для (1), я подозреваю, что было бы быстрее, если бы вы сделали это в postgres, используя столбец jsonb .
Теги:
jooq

1 ответ

3
Лучший ответ

У вас есть несколько интересных вопросов.

1. Логика запросов в логике базы данных и запросов в Java

Это зависит. Во-первых, в PostgreSQL, в частности, jsonb имеет лучшую поддержку индекса. Я не эксперт по этой теме, но я уверен, что вы придете к такому выводу, как только вы проверите 1-2 вещи. Здесь интересное сообщение в блоге, сравнивающее разные типы данных для производительности в PostgreSQL:

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

... который подводит меня к вопросу о том, следует ли помещать предикаты в ваш SQL-запрос или выполнять их позже на Java. В общем: поместите его в базу данных. Если ваш предикат является очень избирательным, вы можете:

  1. Избегайте большого количества ненужных операций ввода-вывода в базе данных
  2. Избегайте большого количества ненужных операций ввода-вывода с базой данных

Оба из них приводят к значительно меньшей задержке ваших запросов. Если ваш предикат не очень избирателен, это вряд ли будет проблемой, за исключением экстремальной нагрузки. Но все же, если ваша система находится под экстремальной нагрузкой, и ваши предикаты являются выборочными, вы все равно значительно уменьшите эту нагрузку, если вы запустите предикат в базе данных.

2. Поддержка jOOQ предикатов JSON

jOOQ в настоящее время не предлагает никакой готовой поддержки предикатов JSON (B), но вы можете легко создать утилиту самостоятельно, используя поддержку jQQ plain 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 vs Gson

Я не буду отвечать на эту часть здесь, так как ваш тест может отличаться от моего.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню