Каков правильный дизайн приложения для чтения / хранения данных? - PullRequest
2 голосов
/ 24 февраля 2011

Мне нужно прочитать около 200 000 записей с сайта и сохранить их в БД.Приложение представляет собой настольное приложение, реализованное поверх платформы NetBeans Rich Client.Используя библиотеку Apache HttpComponent, я могу отправить запрос на веб-сайт и получить ответ, содержащий информацию о записи;затем с помощью регулярных выражений я могу довольно легко извлечь дюжину нужных мне полей из HTML.

Я думаю иметь 2 рабочих потока помимо потока GUI.Один рабочий поток обрабатывает часть запроса / ответа HTTP, а также извлекает запись из HTML с помощью регулярных выражений;в то время как другой рабочий поток сохраняет записи в БД.Таким образом, будет структура данных для хранения записей, чтобы ее можно было разделить между двумя рабочими потоками.Я также рассматриваю возможность иметь буфер размером 100 (например) для рабочего потока HTTP для хранения записей, а когда буфер заполнен, передавать 100 записей одновременно владельцу общих записей.

Пожалуйста, прокомментируйте мой дизайн, а также мои вопросы:

  1. Какова правильная структура данных для хранения записей?
  2. как синхронизировать его между двумя рабочими потоками?
  3. как бы реализовать многопоточность в модульной системе Netbeans Platform?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Какова правильная структура данных для хранения записей?

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

как синхронизировать его между двумя рабочими потоками?

Для этого может подойти одна из реализаций BlockingQueue . ArrayBlockingQueue может использоваться в качестве буфера фиксированного размера для передачи работы между потоками.

как бы реализовать многопоточность в модульной системе платформы Netbeans?

Не знаю, есть ли что сказать об этом на платформе NetBeans.Запуск собственных тем должен работать.

1 голос
/ 24 февраля 2011

Прежде всего, этот вид HTML-разбора сильно замедлит работу вашего приложения. Кроме того, код будет довольно хрупким, поскольку HTML часто меняется для улучшения эстетики. Вы должны прибегнуть к «очистке HTML» в качестве последнего средства. Большинство клиентов соглашаются открыть для этого веб-службу / службу данных, как только вы объясните недостатки.

Если у вас действительно нет других альтернатив, то я думаю, что ваш подход хорош. Но вместо ожидания заполнения буфера у вас может быть набор потоков, записывающих в буфер, и набор потоков, считывающих из буфера одновременно. Я бы предложил использовать большее количество потоков скребка HTTP и меньшее количество потоков записи DB, поскольку цикл запроса-ответа HTTP и синтаксический анализ HTML будут в разы медленнее, чем запись в базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...