Хранение в памяти и работа с большими списками данных Spring Boot 2 Java - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть приложение, которое много работает с большими списками данных в памяти.В настоящее время я использую структуру синглтона данных следующим образом:

public class DataCache {

    private final Map<String, Map<String, ArrayList<String>>> arraysMap = new HashMap();
    private final Map<String, Map<String, Integer>> integerMap = new HashMap();
    private final Map<String, Map<String, String>> stringMap = new HashMap();
    private final Map<String, Map<String, MyObject>> arraysMap = new HashMap();

    /**
     * Map for boolean locks used to temporaly disable
     * edition while the data changes.
     */
    private final Map<String, Map<String, Boolean>> locksMap = new HashMap();

    private DataCache() {

    }

    private static final DataCache dataCache = new DataCache();

    public static DataCache getInstanceOf() {

        return dataCache;
    }

    ...getters/setters...
}

arraysMap и myObjectMap получают большую часть рабочей нагрузки - что-то около 20-50 / с операций со списком, таких как put / replace / delete и аналогичные для myObjectMap (сумма для всех объектов).maps доступны в многопоточном контексте.Первоначально такой нагрузки не ожидалось, но, похоже, она работает нормально.Однако, похоже, что сложность данных будет расти, как и нагрузка.

Вопрос - это - разумно ли переключиться на какое-то внешнее решение (redis?) Или сохранения этой импровизации может быть достаточно.Нагрузка может увеличиться до максимум 500 операций в секунду на карту.Списки в arraysMap могут достигать 200 МБ.

1 Ответ

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

разумно переключиться на решение для внешнего кэширования, такое как redis / memcache, наиболее важным преимуществом является то, что вы можете легко масштабировать свое приложение, когда работа становится больше, вам нужно только развернуть приложение на других машинах

enter image description here

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