Каков наилучший способ - хранить данные таблицы в Java-массиве или в таблице доступа, когда и где это необходимо? - PullRequest
0 голосов
/ 10 марта 2012

Проблема такая:

Я получаю широту и долготу из точки и сохраняю ее в agent классе. Класс имеет идентификатор членов, широту и долготу и связанные функции.

Теперь при запуске java-приложения оно считывает все строки из локальной таблицы MySQL (имеющие значения cordinate) и сохраняет их в массиве этих agent переменных. Затем он читает этот массив, вызывает необходимые функции и в конце рисует график.

Это прекрасно работает для таблицы из 8–10 тыс. Строк, но затем для другой таблицы с 200 000 строк начинает выдавать ошибку размера кучи в Java.

Я думаю об изменении кода для доступа к БД каждый раз, когда нужны координаты агента. Это должно уменьшить память, необходимую, верно? Однако существует много циклов, использующих Iterator этого agent ArrayList. Я до сих пор не могу понять, как с этим справиться.

Так что было бы лучшим вариантом - читать из таблицы каждый раз или продолжать как есть и увеличивать выделение памяти Java? Спасибо за чтение.

Ответы [ 2 ]

1 голос
/ 11 марта 2012

старайтесь загружать данные только по мере необходимости. У нас не так много информации, но я предполагаю, что пользователю не нужно видеть / взаимодействовать со всеми 10 000 точек данных одновременно. Помимо физических ограничений размера экрана устройства, на самом деле пользователь будет просто поражен таким большим количеством информации.

Я бы попробовал внедрить систему подкачки. Опять же, я понятия не имею, для чего вы используете класс Agent, но попробуйте загрузить только столько Agent s, сколько вы показываете пользователю.

0 голосов
/ 11 марта 2012

Ваша стратегия имеет серьезный недостаток: большой объем данных считывается с диска, затем сохраняется в памяти базы данных, отправляется в приложение Java и, наконец, помещается в память JVM.Это занимает много времени и ресурсов.

Используйте курсоры, тогда вы сможете одновременно читать из базы данных и выполнять итерации в наборе результатов в Java-приложении, и JVM не придется выделять столько памяти.

Некоторая документация:

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