Я разрабатывал API-интерфейс spring boot
для извлечения данных из удаленной таблицы базы данных mysql
. В этой таблице ежедневно содержится 300–400 тыс. Данных. Сейчас нам нужно перенести эти данные на mongoDB
. Я попробовал технику GridFS
, чтобы сохранить собранный файл json
на mongoDB
. Я смог это сделать на локальной машине. Но когда я попробовал этот сценарий с живым сервером, JVM
выдал ошибку:
2018-12-18 17:59:26.206 ERROR 4780 --- [r.BlockPoller-1] o.a.tomcat.util.net.NioBlockingSelector :
java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.ArrayList.iterator(ArrayList.java:840) ~[na:1.8.0_181]
at sun.nio.ch.WindowsSelectorImpl.updateSelectedKeys(WindowsSelectorImpl.java:496) ~[na:1.8.0_181]
at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:172) ~[na:1.8.0_181]
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) ~[na:1.8.0_181]
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) ~[na:1.8.0_181]
at org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller.run(NioBlockingSelector.java:339) ~[tomcat-embed-core-8.5.14.jar:8.5.14]
2018-12-18 17:59:27.865 ERROR 4780 --- [nio-8083-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/datapuller/v1] threw exception [Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: GC overhead limit exceeded] with root cause
java.lang.OutOfMemoryError: GC overhead limit exceeded
Я попытался превысить размер кучи с -Xmx3048m
, открыв утилиту java
из панели управления ... но результат тот же. Что мне делать дальше, чтобы решить эту проблему. Я не публиковал здесь код, потому что надеюсь, что все в порядке, поскольку он работал нормально на локальном компьютере с данными записи от 60 до 70 тысяч.
тогда что я должен использовать
Самый эффективный способ - всегда обходить эту абстракцию.
Поскольку вы не заблокированы для загрузки Sprint, я предлагаю вам сбросить данные как csv из mysql, либо через mysqldump, либо
echo 'SELECT * FROM table' | mysql -h your_host -u user -p -B <db_schema>
Затем вы можете импортировать этот CSV в MongoDB.
mongoimport --host=127.0.0.1 -d database_name -c collection_name --type csv --file csv_location --headerline
https://docs.mongodb.com/manual/reference/program/mongoimport/
зачем для этого использовать пружинный ботинок?