powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Одовременная запись данных в таблицу БД
16 сообщений из 16, страница 1 из 1
Одовременная запись данных в таблицу БД
    #38162102
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня. Прошу сильно не пинать, знаний пока что не хватает, поэтому спрашиваю у вас совета.
Условие: Есть N датчиков (примерно 100). Датчики одновременно шлют данные по TCP протоколу с интервалом в <1 секунду.
Задача: Необходимо записывать данные в таблицу (на Postgres)
Вопрос : Как лучше реализовать запись данных?

Варианты, которые пришли в голову:
1. Общий для всех потоков (1 датчик=1 поток) LinkedBlockingQueue.
Добавление в очередь:
Код: java
1.
list.put(message);


Отдельным потоком беру данные из очереди
Код: java
1.
list.take();


и записываю в таблицу.
2. Для каждого потока свой синхронизированный список и одновременная запись в таблицу из всех потоков.

Мне кажется, что оба варианта совсем не по фен-шую. Помогите пожалуйста советом.
Заранее благодарю.
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162143
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему со стороны Java тут как ни сделай, будет вполне ОК. 100 сообщений в секунду, не так, много. Главное чтобы они как можно меньше друг друга блокировали.
А вот над чем бы стоило подумать, так это над записью в Postgres. Какой размер сообщения? Какого размера будет база через неделю? Через месяц? Как при этом изменится скорость вставки? Нужна ли возможность архивации?
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162149
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, Вопрос как-раз и в блокировках. А БД это уже другой вопрос:)
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162159
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danatriel,
1 уровень - системный. Сбор в ОДИН список всех датчиков. Всё равно сколько потоков, но и 1 справится.
2 уровень - прикладной. 1 поток\процесс_из_файла пишет с этого списка.
Итого 1 поток на прикладном уровне и 1 на системном.
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162164
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сделал одну очередь и пул с двух сторон. Чтобы можно было с каждой стороны настраивать сколько потоков обслуживают чтение датчиков и запись в базу. В базу конечно, же нужно писать большими батчами. Скорее всего в 1-2 потока. Проблема только в том что делать с аварийными ситуациями, когда вся очередь, которая в памяти теряется.
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162171
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
Один поток на системном уровне не получится сделать, т.к. читаю данные с датчиков через сокет, как только коннектится новый датчик к сокету, создается новый поток. Может это и не правильно, но другой реализации не знаю.
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162173
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danatrielBlazkowicz, Вопрос как-раз и в блокировках. А БД это уже другой вопрос:)
Мне кажется 100 сообщений в секунду это фигня, даже Vector должен справится. Ну, конечно, же так делать не стоит. Нужна нормальная колекция с ReadWrite блокировкой.
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162176
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danatrielОдин поток на системном уровне не получится сделать, т.к. читаю данные с датчиков через сокет, как только коннектится новый датчик к сокету, создается новый поток. Может это и не правильно, но другой реализации не знаю.
NIO
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162188
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Netty + а в базе данных обязательно сделать сегментацию таблиц по временным промежуткам
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162208
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dan Blackа в базе данных обязательно сделать сегментацию таблиц по временным промежуткам
+100
Данные потом еще и запрашивать надо будет. Или чисто для выборки/показа или для агрегирования (среднее за интервал, сумма).
Без сегментации любой подобный запрос умрет
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162235
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с чего она умрет при нагрузке 100 зап. в сек.
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162247
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123с чего она умрет при нагрузке 100 зап. в сек.
с любого запроса типа select sum(показатель) за предыдущие сутки, например (или за предыдущий час). Обычно в таких случаях мгновенные данные нужны для агрегирования и работа потом ведется над агрегированными значениями. Только их еще успеть посчитать надо, так чтобы скорость обсчета была больше чем скорость записи исходных измерений в базу.
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162259
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanBezPetro123с чего она умрет при нагрузке 100 зап. в сек.
с любого запроса типа select sum(показатель) за предыдущие сутки, например (или за предыдущий час). Обычно в таких случаях мгновенные данные нужны для агрегирования и работа потом ведется над агрегированными значениями. Только их еще успеть посчитать надо, так чтобы скорость обсчета была больше чем скорость записи исходных измерений в базу.
ну не знаю. Домысливать за автора не буду. Нагрузка как у всех БД. Обычная.
Если БД неблокировочник, то там вообще в ней 1 поток пишет и не мешает читать.
Удачи аффтару.
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162307
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
тестировал так: 100 потоков пишут по 10000 сообщений с интервалом 500 мс в очередь - из очереди данные пишутся в БД одним потоком,даже без использования батча.
сделал запись в БД одним потоком - глюков вроде нет. Может вообще моя проблема надуманна и все так и оставить?:)
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162316
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danatrielМожет вообще моя проблема надуманна и все так и оставить?:)
С точки зрения Java, да. Как уже написал выше, любое простое и адекватоное решение для указаной нагрузки не проблема. Т.е. наоборот. :)
...
Рейтинг: 0 / 0
Одовременная запись данных в таблицу БД
    #38162322
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо вам за консультацию))
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Одовременная запись данных в таблицу БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]