Параметры при сохранении всех данных в памяти не масштабируются - PullRequest
2 голосов
/ 18 февраля 2012

Я написал приложение Java, которое пользователи устанавливают на рабочий стол. Он сканирует веб-сайты, сохраняя данные о каждой странице в LinkedList. Приложение позволяет пользователям просматривать все страницы, отсканированные в JTable.

Это прекрасно работает для небольших сайтов, но не очень хорошо масштабируется. В настоящее время пользователям приходится выделять больше памяти (что переводится в -Xmx при запуске Java) для больших сканирований.

В настоящее время я думаю о том, чтобы перейти к хранению всех данных в базе данных, возможно, используя что-то вроде HSQLDB.

Есть ли другие подходы, которые я должен рассмотреть?

Ответы [ 4 ]

0 голосов
/ 19 февраля 2012

Попробуйте сохранить данные страницы в db4o http://community.versant.com, объектной базе данных. Объектные базы данных обрабатывают сложные объекты (например, с множеством братьев и сестер), чем реляционные базы данных.

0 голосов
/ 18 февраля 2012

Реляционная база данных, вероятно, является правильным подходом для этого случая.Причины:

  • Это позволит вам обрабатывать обходы с большим объемом памяти.
  • Если вы храните данные ссылок в отдельных таблицах из значительно больших объемов данных страниц, вывозможно, все еще сможет вместить все ваши ссылки в памяти, что будет очень важно с точки зрения производительности и поиска
  • Это даст вам простой способ сохранения просканированных данных (на случай, если это потребуется в будущем)
  • Это довольно известная / стандартная технология
  • Доступна хорошая реализация базы данных с открытым исходным кодом ( H2 или JavaDB , вероятно, были бы моим первым выбором, поскольку онимогут быть встроены и написаны на чистом Java)
  • Реляционные функции могут оказаться полезными, например, запросы к ссылочным данным
  • Не похоже, что у вас есть объемы данных или требования к доступностиэто может подтолкнуть вас к решению типа NoSQL
0 голосов
/ 18 февраля 2012

У вас есть в основном 4 варианта:

  1. Хранить данные в виде простых файлов
  2. Хранить данные в базе данных
  3. Каким-то образом передавать данные в «облако»«(Я понятия не имею, как)
  4. Каким-то образом« свести »данные к основам, зная, что вы можете повторно извлечь полную информацию при необходимости

Вы также можете сделатьвариант 4, чтобы получить некоторое пространство - вместо «богатой» структуры объекта, сжимайте каждый отдельный элемент данных в одну строку или байт [] или такой, который вы сохраняете в массиве или массиве по сравнению со связанным списком.Это может снизить ваши требования к хранилищу в 2 раза или более.Менее «объектно-ориентированный», но иногда вмешивается реальность.

0 голосов
/ 18 февраля 2012

отношение БД не является хорошим местом для хранения данных веб-страницы.Вы могли бы сохранить страницы на диске?Если вы хотите выполнить поиск по результатам сканирования.попробуйте поисковик Apache Lucene.загрузка всех результатов в память нецелесообразна.Вы можете разбить на страницы модель JTable и использовать soft-reference для кэширования некоторых результатов при разбивке на страницы.

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