powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Вытесняющий кэш для высоконагруженной системы?
25 сообщений из 96, страница 1 из 4
Вытесняющий кэш для высоконагруженной системы?
    #39911342
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумчане, здравствуйте! С рождеством!
Нужен ваш совет.
Очень нужно сделать тестовое задание.
Уровень знаний: +- основы JDBC и сервлетов без Spring.
Задание по ссылке. В какую сторону копать, пожалуйста, подскажите?
https://drive.google.com/open?id=1kcLCYtCkzDwNs0cFpDIZ-VpyOiX_Y3ed
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39911355
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что именно не понятно? Если всё, то это не ваш уровень.
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39911358
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrossmasteR,

1) Тут я бы посмотрел стандарт javax.cache и много ли там надо реализовывать интерфейсов. Возможно есть какие-то простые примеры имплементаций. А дальше фантазия: как это сделать хорошо, в отдельном ли процессе и т.п. Возможно какой-то стандарт попроще поискать, если совсем плохо будет)
2) Тут посмотрел в сторону aspectj (или каких-нибудь других реализация аспектов) или триггеров на уровне субд
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39911359
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett
А что именно не понятно? Если всё, то это не ваш уровень.
Ну вот я прочел, мне, к примеру, совершенно непонятен скоуп, т.е. там может быть и просто ConcurrentMap<Object[], Value<Object>> (ну тут очевидно что с мутабельностью ключей будет хрень), обвешанный различного рода костылями, а может быть и такое, что хотят JCache (тут просто API нарисовать - это нифига не неделя работы и не пара). Ну и само задание какое-то корявое само по себе, потому что:
  • во-первых, в проекте код вида:
    Код: java
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
  • public Object get(Object arg1, Object arg2,...) {
  • Object[] key = new Object[] {arg1, arg2};
  • Value<?> result = cache().get(key);
  • if (result == null) {
  • result = new Value(doGet(arg1, arg2));
  • cache().put(key, result);
  • }
  • return result.getValue();
  • }

  • будет выглядеть ну очень плохо и нужно сразу уходить в сторону AOP, IoC/DI или банальной кодогенерации,
  • во-вторых, что кешировать и как инвалидировать - это больше про бизнеслогику
  • в-третьих, есть пункты вообще "так себе", например "Структуры данных должны иметь возможность быть разделены между двумя Java процессами" - здесь если мы за данными лезем не в память, а куда-то еще - то это уже не кеш, а целый новый слой (ну вот мне совсем не очевидно, что сходить за ФИО пользователя в базу дороже чем в какой-то другой сервис, соответственно это означает, что чтобы был профит в "кеширующем слое" данные должны лежать в более другом виде чем в БД).
  • ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911360
    Дмитрий Мух
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Андрей Панфилов,

    первое, что приходит на ум - это декоратор над репозиторием реализовать: один, что кэширует в памяти, другой, что к примеру в Redis
    их сочетание и покроет все пункты
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911364
    Андрей Панфилов
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Дмитрий Мух

    первое, что приходит на ум - это декоратор над репозиторием реализовать: один, что кэширует в памяти, другой, что к примеру в Redis
    их сочетание и покроет все пункты
    так не делают, потому что универсальный "декоратор" написать нельзя - нужно вводить какие-то конвенции на названия методов, возвращаемые значения, передаваемые аргументы (ну вот тот же update/insert/delete со стороны жавы ничем не отличается от select, потому что и то и другое возвращает данные) и контекст (очевидно что пользователя через стэк таскать так себе удовольствие, в транзакциях не получать мусор тоже не хочется) - а это уже проще через аннотации и AOP разруливать.
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911377
    PetroNotC Sharp
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Не понял. Это ТЗ с ОРМ как соотносится?
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911381
    Дмитрий Мух
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Андрей Панфилов
    Дмитрий Мух

    первое, что приходит на ум - это декоратор над репозиторием реализовать: один, что кэширует в памяти, другой, что к примеру в Redis
    их сочетание и покроет все пункты
    так не делают, потому что универсальный "декоратор" написать нельзя - нужно вводить какие-то конвенции на названия методов, возвращаемые значения, передаваемые аргументы (ну вот тот же update/insert/delete со стороны жавы ничем не отличается от select, потому что и то и другое возвращает данные) и контекст (очевидно что пользователя через стэк таскать так себе удовольствие, в транзакциях не получать мусор тоже не хочется) - а это уже проще через аннотации и AOP разруливать.

    не универсальный декоратор, а две реализации интерфейса Repository
    одна над кэшем в памяти, другая над Redis

    и что значит не делают, когда Декторатор - это широко известный и применяемый шаблон проектирования?
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911393
    Андрей Панфилов
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Дмитрий Мух
    Декторатор - это широко известный и применяемый шаблон проектирования?
    Ок. Вот вам код:

    Код: java
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.
    16.
    17.
    18.
    19.
    20.
    21.
    22.
    23.
    24.
    25.
    26.
    27.
    28.
    29.
    30.
    31.
    32.
    33.
    34.
    35.
    36.
    37.
    38.
    39.
    40.
    41.
    42.
    43.
    44.
    45.
    46.
    @Entity
    class Division {
      
      long id;
      String name;
    
    }
    
    @Entity
    class User {
       
       long id;
       String login;
       String name;
       Division division;
    
    }
    
    interface UserRepository {
      
       User getUserByLogin(String login);
    
       boolean save(User user);
    
    }
    
    @Service
    class UserServiceImpl {
    
       private final UserRepository userRepository;
    
       User getDivisionByLogin(String login) {
          return userRepository.getUserByLogin(String login).getDivision();
       }
    
       String getNameByLogin(String login) {
         return userRepository.getUserByLogin(String login).getName();
       }
    
      boolean changeLogin(String login) {
        User user = userRepository.getUserByLogin(String login);
        user.setLogin(login);
        userRepository.save(user);
      }
    
    }
    



    Попробуйте для него реализовать свою гениальную идею
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911398
    Дмитрий Мух
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Андрей Панфилов,

    первый попавшийся пример: https://riptutorial.com/design-patterns/example/12135/caching-decorator
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911406
    Андрей Панфилов
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Дмитрий Мух
    Андрей Панфилов,

    первый попавшийся пример: https://riptutorial.com/design-patterns/example/12135/caching-decorator
    Ну т.е. PoC для моего пример ждать не стоит?

    А вы разве не видите, что код:
    Код: java
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
        public Product GetProduct(int id)
        {
            var cacheKey = GetKey(id);
            var product = _cache.Get<Product>(cacheKey);
            if (product == null)
            {
                product = _decoratedRepository.GetProduct(id);
                _cache.Set(cacheKey, product, DateTimeOffset.Now.AddHours(ExpirationInHours));
            }
            
            return product;
        }
    


    и:
    Код: java
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    public Object get(Object arg1, Object arg2,...) {
       Object[] key = new Object[] {arg1, arg2};
       Value<?> result = cache().get(key);
       if (result == null) {
          result = new Value(doGet(arg1, arg2));
          cache().put(key, result);
       }
       return result.getValue();
    }
    



    суть одно и то же, причем оба говно (в вашем примере еще почему-то считается что отсутсвие данных - это не результат )
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911418
    PetroNotC Sharp
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911419
    Фотография Valentin Kolesnikov
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    GrossmasteR
    Уважаемые форумчане, здравствуйте! С рождеством!
    Нужен ваш совет.
    Очень нужно сделать тестовое задание.
    Уровень знаний: +- основы JDBC и сервлетов без Spring.
    Задание по ссылке. В какую сторону копать, пожалуйста, подскажите?
    https://drive.google.com/open?id=1kcLCYtCkzDwNs0cFpDIZ-VpyOiX_Y3ed


    Код для вытесняющий кэш для высоконагруженной системы.

    Код: java
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.
    16.
    17.
    18.
    19.
    20.
    21.
    22.
    23.
    24.
    25.
    26.
    27.
    28.
    public class LruCache<K, V> {
            private static final boolean SORT_BY_ACCESS = true;
            private static final float LOAD_FACTOR = 0.75F;
            private final Map<K, V> lruCacheMap;
            private final int capacity;
    
            public LruCache(int capacity) {
                this.capacity = capacity;
                this.lruCacheMap = new LinkedHashMap<K, V>(capacity, LOAD_FACTOR, SORT_BY_ACCESS);
            }
    
            public V get(K key) {
                return lruCacheMap.get(key);
            }
    
            public void put(K key, V value) {
                if (lruCacheMap.containsKey(key)) {
                    lruCacheMap.remove(key);
                } else if (lruCacheMap.size() >= capacity) {
                    lruCacheMap.remove(lruCacheMap.keySet().iterator().next());
                }
                lruCacheMap.put(key, value);
            }
        }
    
        public static <K, V> LruCache<K, V> createLruCache(final int capacity) {
            return new LruCache<K, V>(capacity);
        }
    



    Хорошего вам дня!
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911468
    Андрей Панфилов
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Valentin Kolesnikov,

    а где API-то?
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911475
    Фотография Valentin Kolesnikov
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Андрей Панфилов
    Valentin Kolesnikov,

    а где API-то?


    Методы get и put.

    Хорошего вам дня!
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911742
    Фотография Где-то в степи
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    GrossmasteR,
    как бы так и хочется сказать redis or memcached
    но запилить свой фреймворк имхо не тестовый контекст, хотя можно взять и готовые ...
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911745
    Фотография mayton
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    В первом посте приаттачено абсолютно "сферическое" задание. В нем нет цифр. Нет количества активных
    пользователей. Транзакций в секунду. Или сетевых сокетов.

    Тоесть читающий должен интерпретировать поэтические метафоры вроде "с сравнительно большой нагрузкой".
    "крупной системе", "горячих данных".

    Вобщем мне вспоминается сказка Буратино где "Сова" и "Жаба" решали что поциент
    Буратино скорее жив чем мёртв или наоборот.
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911747
    PetroNotC Sharp
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Магазин цветов для новичка как ТЗ выглядит лучше.
    Ставлю на то что ТС здесь не появится.
    Если я прав то ТЗ не для новичков.
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911873
    gycb
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Гость
    PetroNotC Sharp
    Магазин цветов для новичка как ТЗ выглядит лучше.
    Ставлю на то что ТС здесь не появится.
    Если я прав то ТЗ не для новичков.

    однозначно не для новичков
    но вот мне чо то захотелось это сделать)
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911910
    PetroNotC Sharp
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    gycb,
    Сабж захотел? Не сделаешь. Да и ТЗ дурное.
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911940
    Дмитрий Мух
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Андрей Панфилов
    Дмитрий Мух
    Андрей Панфилов,

    первый попавшийся пример: https://riptutorial.com/design-patterns/example/12135/caching-decorator
    Ну т.е. PoC для моего пример ждать не стоит?

    PoC? Proof of concept? Вы ожидаете доказательства факта, что декораторы работают? Серъёзно?
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911946
    PetroNotC Sharp
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Дмитрий Мух,
    Не надо думать что подходы шарп работают в java. Или подходы java работают в плюсах.
    А вести переписку с заблокированным мембером это верх цинизма.
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39911998
    Фотография skyANA
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    PetroNotC Sharp
    Дмитрий Мух,
    Не надо думать что подходы шарп работают в java. Или подходы java работают в плюсах.
    А вести переписку с заблокированным мембером это верх цинизма.
    Декоратор - это шаблон проектирования.
    К конкретному языку и платформе он не привязан.
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39912019
    PetroNotC Sharp
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    skyANA,
    К топику шаблон привязать не получится. Тем более не программисту.
    ...
    Рейтинг: 0 / 0
    Вытесняющий кэш для высоконагруженной системы?
        #39912023
    Фотография skyANA
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    PetroNotC Sharp
    skyANA,
    К топику шаблон привязать не получится. Тем более не программисту.
    Не понял мысль.
    ...
    Рейтинг: 0 / 0
    25 сообщений из 96, страница 1 из 4
    Форумы / Java [игнор отключен] [закрыт для гостей] / Вытесняющий кэш для высоконагруженной системы?
    Целевая тема:
    Создать новую тему:
    Автор:
    Закрыть
    Цитировать
    Найденые пользователи ...
    Разблокировать пользователей ...
    Читали форум (0):
    Пользователи онлайн (0):
    x
    x
    Закрыть


    Просмотр
    0 / 0
    Close
    Debug Console [Select Text]