Идиома Java для “передачи по каналу”

Вы на правильном пути. По сути, это INSERT с предложением WHERE. Итак, вам нужно создать запись в таблице «Чтения» для датчиков, которые имеют ОБНОВЛЕНИЕ за последние X дней (10 в моем примере ниже)

Что-то вроде:

insert into readings
select 1 as id, id as sens_id, null as info
from sensors
where datediff(now(),latest_update) > 10;

В моем примере я предоставляю идентификатор, но я предполагаю, что это целое число автоинкремента в вашем BD ...

, а затем обновите поле ОБНОВЛЕНИЕ ...

update sensors set latest_update = now()
where datediff(now(),latest_update) > 10;

Иди, попробуй сам ...

https://www.db-fiddle.com/f/u1EWRpH7nbxHEjwBDUgwLh/0

ОБНОВЛЕНИЕ:

https : //www.db-fiddle.com/f/u1EWRpH7nbxHEjwBDUgwLh/1

Если last_update проиндексирован, я предлагаю вместо этого:

where date_add(now(),INTERVAL -10 DAY) > latest_update;

, чтобы извлечь выгоду из индексации.

«Когда вы оборачиваете функцию вокруг индексированного столбца, SQL Server должен вычислить значение функции для каждой строки в таблице. Когда вы просто сравниваете индексированный столбец со скалярным значением или результатом функции, SQL Server может используйте это значение для поиска в индексе. "

Не совсем точно для MySQL, поскольку я не проверял его в этом случае, но чтобы быть уверенным :)

https: // www.sqlteam.com/articles/avoid-enclosing-indexed-columns-in-a-function-in-the-where-clause

9
задан deHaar 1 September 2019 в 10:21
поделиться

3 ответа

IOUtils от Apache, проект палаты общин имеет много utilily методов, которые делают точно, в чем Вы нуждаетесь.

IOUtils.copy(in, out) выполнит буферизированную копию всего входа к выводу. Если существует больше чем одно место в Вашей кодовой базе, которая требует Stream или Reader/Writer обработка, использование IOUtils могли быть хорошей идеей.

10
ответ дан 3 November 2019 в 00:06
поделиться

Смотрите на java.io. PipedInputStream и PipedOutputStream или PipedReader/PipedWriter от того же пакета.

Из документации PipedInputStream:

Переданный по каналу входной поток должен быть подключен к переданному по каналу потоку вывода; переданный по каналу входной поток затем обеспечивает, любые байты данных записаны в переданный по каналу поток вывода. Как правило, данные считаны с объекта PipedInputStream одним потоком, и данные записаны в соответствующий PipedOutputStream некоторым другим потоком. Попытка использовать оба объекта от единственного потока не рекомендуется, поскольку она может завести в тупик поток. Переданный по каналу входной поток содержит буфер, отделяя операции чтения от операций записи, в определенных рамках. Канал, как говорят, повреждается, если поток, который предоставлял байты данных связанному переданному по каналу потоку вывода, больше не жив.

1
ответ дан 3 November 2019 в 00:06
поделиться

Единственной доступной оптимизацией является через FileChannels в NIO API: Чтения, Записи. JVM может оптимизировать этот вызов для перемещения данных с файла на целевой канал, сначала не имея необходимость переместить данные в пространство ядра. См. эту статью для деталей.

1
ответ дан 3 November 2019 в 00:06
поделиться
Другие вопросы по тегам:

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