Vertx 3 — Java, сериализующий большие объекты

Vertx 3 Новичок. Я использую API Java. Вариант использования предназначен для приложения для создания отчетов, которое обычно имеет дело с большими объектами (POJO). Эти POJO содержат данные для экспорта в PDF, CSV и т. д., и обычно это список карт. Мне интересно, если мне придется асинхронно передавать данные в разные вершины через EventBus, будет стоимость сериализации/десериализации. Есть ли какие-нибудь советы/рекомендации при работе с большими объектами, чтобы мы не несли огромные накладные расходы на сериализацию/десериализацию?


person user1189332    schedule 07.05.2017    source источник
comment
Какой может быть размер?   -  person akhil_mittal    schedule 07.05.2017
comment
stackoverflow.com/questions/129695/   -  person akhil_mittal    schedule 07.05.2017
comment
от 50 МБ до 100 МБ   -  person user1189332    schedule 07.05.2017


Ответы (2)


Я думаю, что это плохая идея отправлять что-либо большое через EventBus. Вы можете использовать vertx SharedData и отправлять только идентификатор вашего объекта.

   LocalMap<String, LargeObject> map = vertx.sharedData.getLocalMap("uniq-map-id");
   map.put("unique-id", data);
   vertx.eventBus.send(ADDRESS, "unique-id");
person Iliya    schedule 15.05.2017

Для этого вы можете развернуть анонимную рабочую вертикулу:

Предполагая, что LongOperatingVerticle — это вертикул, который обрабатывает ваши POJO:

class LongOperatingVerticle extends AbstractVerticle {

    @Override
    public void start() {

        final String pojo = "Very long file...";


        final Future<String> f = Future.future();

        // Anonymous verticle in worker mode
        this.vertx.deployVerticle(new AbstractVerticle() {
            @Override
            public void start() throws Exception {

                Thread.sleep(5000);
                f.complete("Ok");
            }
        }, new DeploymentOptions().setWorker(true));

        System.out.println("Will wait now");

        f.setHandler((e) -> {
            System.out.println(e.result());
        });

    }
}
person Alexey Soshin    schedule 07.05.2017