Как вытащить 300-400k данных, хранящихся в mysql, в mongoDB

Я разрабатывал 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 тысяч.

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

Jacob 18.12.2018 15:41

тогда что я должен использовать

J. Doe 19.12.2018 06:19
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
71
1

Ответы 1

Самый эффективный способ - всегда обходить эту абстракцию.

Поскольку вы не заблокированы для загрузки 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/

Другие вопросы по теме