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

1) Тут я бы посмотрел стандарт javax.cache и много ли там надо реализовывать интерфейсов. Возможно есть какие-то простые примеры имплементаций. А дальше фантазия: как это сделать хорошо, в отдельном ли процессе и т.п. Возможно какой-то стандарт попроще поискать, если совсем плохо будет)
2) Тут посмотрел в сторону aspectj (или каких-нибудь других реализация аспектов) или триггеров на уровне субд
...
Рейтинг: 0 / 0
07.01.2020, 15:59
    #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
    07.01.2020, 16:07
        #39911360
    Дмитрий Мух
    Участник
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Вытесняющий кэш для высоконагруженной системы?
    Андрей Панфилов,

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

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

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

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

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

    первый попавшийся пример: https://riptutorial.com/design-patterns/example/12135/caching-decorator
    ...
    Рейтинг: 0 / 0
    07.01.2020, 17:26
        #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
    07.01.2020, 18:40
        #39911418
    PetroNotC Sharp
    Участник
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Вытесняющий кэш для высоконагруженной системы?
    ...
    Рейтинг: 0 / 0
    07.01.2020, 18:47
        #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
    08.01.2020, 07:51
        #39911468
    Андрей Панфилов
    Участник
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Вытесняющий кэш для высоконагруженной системы?
    Valentin Kolesnikov,

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

    а где API-то?


    Методы get и put.

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

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

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

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

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

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


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