База данных и соединения

Вы можете прочитать пути и значения отдельно, а затем собрать результаты вместе.

Вот пример использования Jayway JsonPath :

String json = "[\n" +
        "  {\n" +
        "    \"id\": 1,\n" +
        "    \"person\": {\n" +
        "      \"name\": \"john\",\n" +
        "      \"age\": \"28\"\n" +
        "    }\n" +
        "  },\n" +
        "  {\n" +
        "    \"id\": 2,\n" +
        "    \"person\": {\n" +
        "      \"name\": \"jane\",\n" +
        "      \"age\": \"25\"\n" +
        "    }\n" +
        "  }\n" +
        "]";

Object parse = Configuration.defaultConfiguration()
        .jsonProvider()
        .parse(json);

JsonPath path = JsonPath.compile("$[*].person.name");

// read the paths
JSONArray asPaths = path.read(parse, Configuration.builder()
        .options(Option.AS_PATH_LIST).build());
String[] paths = asPaths.toArray(new String[asPaths.size()]);

// read the values
JSONArray asValues = path.read(parse);
String[] values = asValues.toArray(new String[asValues.size()]);

// put the paths and values together using the array indexes
Map valuesAndPaths = new HashMap<>();
for (int i = 0; i < values.length; i++) {
    valuesAndPaths.put(values[i], paths[i]);
}

for (Map.Entry entry : valuesAndPaths.entrySet()) {
    System.out.println(entry.getKey() + ", " + entry.getValue());
}

.

5
задан Abhi 16 January 2009 в 05:40
поделиться

2 ответа

Базовый протокол для соединений с базой данных обычно на основе TIP/IP. Соединение может быть завершено одним из нескольких способов:

  1. Сервер закрывает его корректно и получает подтверждение от клиента;
  2. Клиент закрывается, корректно и получает подтверждение от сервера;
  3. Время соединения. Клиент и сервер оба отдельно сказан их соответствующими операционными системами, что соединение было закрыто;
  4. Соединение сильно закрывается любой стороной.

В случае (3), соединения TCP должны быть поддержаны путем отправки фиктивных сообщений время от времени для предотвращения тайм-аута. Ваше соединение может тайм-аут, потому что никакая сторона не делает это (и для соединения с базой данных это не что-то, что Вы обычно хотите сделать).

Для одной стороны совершенно возможно какое-то время думать, что соединение закрывается и hte другая сторона, чтобы все еще полагать, что это открыто. Сообщения могут быть отправлены в тех случаях (и обычно отбрасывал).

Каждое соединение ("сокет") использует ресурс операционной системы, названный дескриптором файла (в языке UNIX, Ваша ОС может назвать его чем-то еще), который является дескриптором к ресурсу ввода-вывода и тому же самому, используемому для открытого файла (снова, OSs может варьироваться).

Предел на соединения на Вашей базе данных будет самым низким из:

  • Настроенный предел для ОС;
  • Максимальные дескрипторы файлов допускали тот процесс (минус любой используемый для действия ввода-вывода); и
  • (возможно) параметры настройки системы или политики в отношении ограничений соединения.

Если соединением не является базирующийся TCP (например, сокет файловой системы, как часто используется с MySQL в системах UNIX), принципы на самом деле очень simlar.

Так или иначе мораль истории для взятия от этого - то, что соединение с базой данных - независимо от его формы - включает ресурс операционной системы некоторого вида. Ваша программа hsa прямо или косвенно попросивший того ресурса. Если программа умрет, то операционная система исправит ее (возможно, не сразу, но в конечном счете). Если соединение будет собрано "мусор" затем, то ресурс будет выпущен почти таким же способом, как будто это было насильственно закрыто.

Что внешний ресурс (а не код Ваш клиент использует), который содержит открытое соединение и управляет любыми пределами.

5
ответ дан 14 December 2019 в 01:19
поделиться

Отвечать на Ваши вопросы в порядке:

  1. Да, вероятно. Если "параллельными соединениями" Вы на самом деле не имеете в виду "параллельных запросов". Если yo're содержание открытого соединения с базой данных, это открыто.

  2. Сборка "мусора" может или не может очистить соединение. Зависит от языка и используемого драйвера базы данных. (Сборка "мусора" может быть ограничена исправлением памяти, не ресурсов как соединения TCP.)

  3. Когда Ваша программа завершается, обычно ОС ответственна за чистку всех ресурсов, которые она использовала. Это включает заключительный TCP, и т.д. соединения. Так, для большинства типов соединения база данных будет уведомлена, что другая сторона закрыла соединение.

4
ответ дан 14 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: